Spring 源码解读分析中上一篇主要介绍关于Bean的初始化以及延迟初始化,接下来分析Bean的销毁阶段-和Bean 的初始化对应!Bean的销毁方式也有三种
注解标注 @preDestory 标注方法
实现 DisposableBean 接口的destroy()方法
自定义销毁方法
xml 配置
Java 注解
Java API
其中可以看到@preDestory Java 标准注解销毁,按照字面意思就是按照我们之前的来进行操作。这里的Destory 和我们的这里的销毁其实有点冲突。@preDestpry 主要是指Bean 对象被销毁,也就是说Bean对象被回收之前,也就是被Java GC 之后才被操作。
思考:假设以上三种方式均在同一Bean中定义,那么这些方法的执行顺序是怎样?
案例分析
其实这里我们可以大胆猜测,Bean 的销毁和 Bean 初始化顺序对应 注解标注> 接口实现 > 自定义
注解标注 @preDestory 标注方法
实现 DisposableBean 接口的destroy()方法
自定义方式实现【这里以Java 注解为案例】
执行结果分析和猜测结果一样
当我们输出应用上下文准备关闭的时候和已关闭之间,也就是我们调用close()方法的过程中上述方法会被逐一关闭掉
总结
通过三种不同的Bean的销毁方案,同时也对比初始化三种方案来做一个参照,会发现注解总是优先,就是Java 标注注解优化;然后Spring 里面DisposableBean 接口是第二位,第三位就是我们自定义的实现方式!这三种方式可以和Bean 的初始化过程一起去对照了解~