未指定Spring Bean销毁方法的影响及依赖Bean销毁顺序疑问
Spring Bean 销毁相关问题解答
问题1:当未为Spring Bean指定destroy方法时,会发生什么?
- Spring容器关闭时,这个Bean的实例依然会被销毁,容器会标记该Bean进入销毁阶段,最终由JVM的垃圾回收机制回收它占用的内存资源。
- 唯一区别是:你自定义的清理逻辑(比如关闭数据库连接、释放文件句柄这类操作)不会被执行,因为没有指定对应的destroy方法来触发这些逻辑。
问题2:Bean A是Bean B的依赖,A指定了destroy方法但B没有,容器关闭时B会被销毁吗?如果B没销毁,A的destroy方法会执行吗?
- 首先,即使B没指定destroy方法,容器关闭时依然会销毁B。Spring会严格按照依赖关系的逆序处理销毁流程:先销毁依赖其他Bean的一方(也就是B,因为它依赖A),再销毁被依赖的一方(A)。
- B的销毁过程只是不会执行自定义的destroy方法,但容器会正常完成Bean的销毁生命周期,标记它为可回收状态。
- 至于A,因为它指定了destroy方法,容器会在销毁B之后,执行A的destroy方法,然后再完成A的销毁回收。不存在“B没销毁导致A也不能销毁”的情况,两者的销毁流程是独立但按顺序执行的。
内容的提问来源于stack exchange,提问作者CS1999
相关产品推荐
相关产品推荐

