在注册为原型的bean上未调用destroy-method

时间:2014-05-03 09:21:45

标签: spring

我有一个bean注册为singleton,并在其上定义了init-method和destroy-method。我正在访问bean,可以看到对这两个方法的调用。但是,在将范围更改为原型时,不会调用destroy-method。

我没有得到这背后的理由。

1 个答案:

答案 0 :(得分:3)

阅读the documentation

  

与其他作用域相比,Spring不管理原型bean的完整生命周期:容器实例化,配置和组装原型对象,并将其交给客户端,没有该原型实例的进一步记录。因此,尽管无论范围如何都在所有对象上调用初始化生命周期回调方法,但在原型的情况下,不会调用已配置的销毁生命周期回调。

这是非常合乎逻辑的:你的应用程序可能每10毫秒要求一个原型bean的新实例,对bean做一些事情,然后让它超出范围。如果Spring在应用程序关闭时必须销毁()它们,它必须保持对每个创建的原型bean的引用,防止它们被垃圾收集,从而导致内存泄漏。

相关问题