【问题标题】:Initialization and release of global resources with spring用spring初始化和释放全局资源
【发布时间】:2016-03-27 05:25:25
【问题描述】:

在我们的应用程序中,我们通常有一些在应用程序范围内使用的资源(实用程序),例如可能是 apache HttpClient,或者在我的情况下是 ConcurrencyUtils,它是一个实用程序类,用于管理所有线程池cpu 密集和 io 任务(为反应流等添加一些调度程序......很多自定义的东西)。

现在当我通过 spring 初始化我的上下文时,我必须做一些不自然的事情(为了初始化和销毁​​静态资源)

注意ConcurrencyUtil 只是一个没有用的假类,我们从不使用它,但我们使用ConcurrencyUtils 的静态方法,并且这个类只确保调用 init 和 destroy(我不知道如何确保在所有 bean 被销毁后调用destroy)...

那么我们如何在 spring context 创建任何 bean 之前和 spring context 释放它的所有 bean 之后运行一段代码(并且自己即将被回收)?

用spring初始化和释放静态资源的正确方法是什么?

【问题讨论】:

  • 请把图片转成文字。
  • 你看不到那些?我认为当人们不会实际复制粘贴代码时图像会更好(当示例很简单时)
  • 我可以看到它们。但是,如果有人想复制粘贴您的代码以帮助您怎么办?我们也不想用代码图像污染这个地方。
  • 当然,我通常会粘贴代码,当它的某些东西可能想要复制尝试时,但是这是一个相当简单的示例,我认为没有人会尝试复制粘贴 :)

标签: java spring initialization resource-management


【解决方案1】:

这可能工作正常。你也可以把它放在类路径中的一个类中,以便扫描 bean:

@Configuration
public class ConcurrencyConfig {

    @PostConstruct
    public void init(){
        ConcurrencyUtil.init();
    }

    @PreDestroy
    public void destroy(){
        ConcurrencyUtil.destroy();
    }
}

我猜这看起来更好一些。

【讨论】:

  • 谢谢,这正是我想要的,我坚持@PostConstruct 将在所有 bean 创建后运行,但它实际上在之前运行:)
  • 它只是在创建包含 bean 之后运行,所以在这种情况下,当 ConcurrencyUtil 创建时。
猜你喜欢
  • 2014-08-12
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
相关资源
最近更新 更多