Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @PostConstruct和@PreDestroy注释的实时应用_Java_Spring_Spring Boot_Spring Mvc_Servlets - Fatal编程技术网

Java @PostConstruct和@PreDestroy注释的实时应用

Java @PostConstruct和@PreDestroy注释的实时应用,java,spring,spring-boot,spring-mvc,servlets,Java,Spring,Spring Boot,Spring Mvc,Servlets,而且在spring引导应用程序中,我们不会在任何地方关闭上下文,所以web应用程序如何管理这个关闭上下文并破坏bean的工作 实际上,此web应用程序将触发关闭上下文并触发@PreDestroy注释。这取决于bean的范围 对于请求范围的bean,在完成HTTP请求处理时调用它 对于会话作用域bean,当会话被破坏时(例如,由于不活动而超时)调用它 对于原型bean,将不调用它,而调用销毁逻辑是开发人员的责任。(在中的文件中提到) 对于单例bean,当您正常终止应用程序时(即,通过发送SIGTE

而且在spring引导应用程序中,我们不会在任何地方关闭上下文,所以web应用程序如何管理这个关闭上下文并破坏bean的工作


实际上,此web应用程序将触发关闭上下文并触发@PreDestroy注释。

这取决于bean的范围

对于请求范围的bean,在完成HTTP请求处理时调用它

对于会话作用域bean,当会话被破坏时(例如,由于不活动而超时)调用它

对于原型bean,将不调用它,而调用销毁逻辑是开发人员的责任。(在中的文件中提到)


对于单例bean,当您正常终止应用程序时(即,通过发送SIGTERM信号,例如
kill 12345
,其中12345是您的应用程序进程ID)调用它。请注意,如果您使用
kill-912345“硬杀死”应用程序,则不会调用它。这取决于bean的范围

对于请求范围的bean,在完成HTTP请求处理时调用它

对于会话作用域bean,当会话被破坏时(例如,由于不活动而超时)调用它

对于原型bean,将不调用它,而调用销毁逻辑是开发人员的责任。(在中的文件中提到)

对于单例bean,当您正常终止应用程序时(即,通过发送SIGTERM信号,例如
kill 12345
,其中12345是您的应用程序进程ID)调用它。请注意,如果您使用
kill-9 12345“硬杀死”应用程序,则不会调用它

@如果您想在所有bean初始化之后执行任何操作,则PostConstruct非常有用。我使用了@PostConstruct的用例如下

我有11个customerProcess类的实现,在每次操作之后,我必须调用一个不同的进程,因此我们需要自动连接其所有实现,而不是使用postconstruct来获取一个枚举映射,我们向其提供类名并获得相应的bean,因此Post Construct在这里为我工作

 @PostConstruct
  private void init() {
    CustomerProcessTask.getClassList().forEach( aClass -> {
      final CustomerTask customerTypeBean = applicationContext.getBean(aClass);
      factory.put(aClass,customerTypeBean);
    });
  }
@PreDestroy有各种用例,当您需要在调用applicationContext.close之前关闭open db连接或回滚某些内容时,可以使用它。但在web应用程序中,dispatcherServlet创建applicationContext,并在服务器停止时关闭上下文。我们不需要显式调用applicationContext.close()

@如果您想在所有bean初始化之后执行任何操作,则PostConstruct非常有用。我使用了@PostConstruct的用例如下

我有11个customerProcess类的实现,在每次操作之后,我必须调用一个不同的进程,因此我们需要自动连接其所有实现,而不是使用postconstruct来获取一个枚举映射,我们向其提供类名并获得相应的bean,因此Post Construct在这里为我工作

 @PostConstruct
  private void init() {
    CustomerProcessTask.getClassList().forEach( aClass -> {
      final CustomerTask customerTypeBean = applicationContext.getBean(aClass);
      factory.put(aClass,customerTypeBean);
    });
  }
@PreDestroy有各种用例,当您需要在调用applicationContext.close之前关闭open db连接或回滚某些内容时,可以使用它。但在web应用程序中,dispatcherServlet创建applicationContext,并在服务器停止时关闭上下文。我们不需要显式调用applicationContext.close()


在web应用程序中,如果组件具有“请求”作用域,则在web请求完成时将调用@PreDestroy。有很多种情况。阅读文档。尝试一下。请提供并描述您需要这些注释(上下文启动/关闭修改)的位置。在web应用程序中,如果组件具有“请求”作用域,则在web请求完成时将调用@PreDestroy。有很多种情况。阅读文档。尝试一下。请提供一个示例,并描述您需要这些注释(上下文启动/关闭修改)的位置。