用spring初始化和释放全局资源
Initialization and release of global resources with spring
在我们的应用程序中,我们通常有一些在应用程序范围内使用的资源(实用程序),例如可能是 apache HttpClient
,或者在我的例子中 ConcurrencyUtils
这是一个实用程序 class 管理 cpu
密集任务和 io
任务的所有线程池(为反应流添加一些调度程序等......很多自定义内容)。
现在,当我通过 spring 初始化我的上下文时,我必须做一些不自然的事情(为了初始化和销毁静态资源)
请注意,ConcurrencyUtil
只是一个没有用的假 class,我们从不使用它,但我们使用 ConcurrencyUtils
的静态方法,而此 class 仅确保调用了 init 和 destroy(我不确定如何确保在销毁所有 bean 后调用 destroy)...
那么我们如何 运行 在 spring context 创建任何 bean 之前和 spring context 释放其所有 beans 之后的一段代码(并且大约本身可回收)?
使用spring初始化和释放静态资源的正确方法是什么?
这可能没问题。您也可以将它放在一个 class 中,该 class 位于扫描 bean 的 class 路径中:
@Configuration
public class ConcurrencyConfig {
@PostConstruct
public void init(){
ConcurrencyUtil.init();
}
@PreDestroy
public void destroy(){
ConcurrencyUtil.destroy();
}
}
我猜这看起来更好一些。
在我们的应用程序中,我们通常有一些在应用程序范围内使用的资源(实用程序),例如可能是 apache HttpClient
,或者在我的例子中 ConcurrencyUtils
这是一个实用程序 class 管理 cpu
密集任务和 io
任务的所有线程池(为反应流添加一些调度程序等......很多自定义内容)。
现在,当我通过 spring 初始化我的上下文时,我必须做一些不自然的事情(为了初始化和销毁静态资源)
请注意,ConcurrencyUtil
只是一个没有用的假 class,我们从不使用它,但我们使用 ConcurrencyUtils
的静态方法,而此 class 仅确保调用了 init 和 destroy(我不确定如何确保在销毁所有 bean 后调用 destroy)...
那么我们如何 运行 在 spring context 创建任何 bean 之前和 spring context 释放其所有 beans 之后的一段代码(并且大约本身可回收)?
使用spring初始化和释放静态资源的正确方法是什么?
这可能没问题。您也可以将它放在一个 class 中,该 class 位于扫描 bean 的 class 路径中:
@Configuration
public class ConcurrencyConfig {
@PostConstruct
public void init(){
ConcurrencyUtil.init();
}
@PreDestroy
public void destroy(){
ConcurrencyUtil.destroy();
}
}
我猜这看起来更好一些。