用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();
    }
}

我猜这看起来更好一些。