Java @PostConstruct和@PreDestroy注释的实时应用
而且在spring引导应用程序中,我们不会在任何地方关闭上下文,所以web应用程序如何管理这个关闭上下文并破坏bean的工作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
实际上,此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。有很多种情况。阅读文档。尝试一下。请提供一个示例,并描述您需要这些注释(上下文启动/关闭修改)的位置。