Spring bean到底是如何创建的?(下)(四)

pivoteic
发布于 2022-6-15 17:12
浏览
0收藏

 

八、Spring Bean销毁阶段

 

这个阶段不属于bean的创建阶段,你平时使用的bean在上一个阶段就完完全全创建好了,这个阶段是在spring容器关闭的时候才会执行。

 

 1)DisposableBean的注册

 

接下来继续往下走

Spring bean到底是如何创建的?(下)(四)-鸿蒙开发者社区Spring bean到底是如何创建的?(下)(四)-鸿蒙开发者社区

这个阶段就是将bean给包裹成一个DisposableBean,也就是DisposableBeanAdapter对象,给放到disposableBeans中,但是要想放到disposableBeans中是要有条件的,比如你实现了DisposableBean接口,或者在xml中配置销毁的方法名或通过@Bean的属性的destoryMethod方法中指定了方法名等,具体的条件可以进入hasDestroyMethod方法中查看

 

2)bean 销毁前阶段

 

spring bean 什么时候会销毁?

 

当项目停止的时候,会回调ApplicationContext的close()方法(是由AbstractApplicationContext实现的),这个回去调用doClose()方法,doClose()方法会去回调BeanFactory(由DefaultListableBeanFactory实现)的destroySingleton方法,然后回调用父类DefaultSingletonBeanRegistry方法,从这开始就开始就进行单例bean的销毁。

 

我们直接定位到DefaultSingletonBeanRegistry的destroySingleton方法

Spring bean到底是如何创建的?(下)(四)-鸿蒙开发者社区

根据bean名称从disposableBeans中取出上面注册的DisposableBean,然后调用destroyBean方法

Spring bean到底是如何创建的?(下)(四)-鸿蒙开发者社区

这里我们可以看出,是直接调用我们注册的DisposableBean,也就是DisposableBeanAdapter事件的destroy方法,接下来我们进入destroy方法

Spring bean到底是如何创建的?(下)(四)-鸿蒙开发者社区

这里就是又是BeanPostProcessor组件方法的回调

 

3)bean的销毁阶段

Spring bean到底是如何创建的?(下)(四)-鸿蒙开发者社区

如果我们自己的bean是实现了DisposableBean接口,那么spring会回调这个方法的实现

 

接下来就是回调我们配置的销毁的回调方法

Spring bean到底是如何创建的?(下)(四)-鸿蒙开发者社区

至此,bean就被销毁了。

 

九、全文总结

 

到这里整个spring bean生命周期源码分析就完全讲完了,包括了bean创建和销毁,其实bean的生命周期说白了就是在bean创建和销毁的不同阶段进行BeanPostProcessor组件方法的回调来达到对于bean的创建或销毁过程扩展的目的。其实我们自己也可以在项目中实现BeanPostProcessor接口来达到自己的目的。在讲述spring bean的生命周期的时候,我也提到了bean的作用域、spring是如何使用三级缓存解决循环依赖等问题。相信这两篇文章看完之后大家对spring bean创建和销毁的过程都有一个全面的了解。

 

十、思考题

 

你知道spring还有哪些功能是通过扩展BeanPostProcessor来实现的么?除了spring之外有哪些框架是通过扩展BeanPostProcessor实现跟spring整合的?

 

文章转自公众号:三友的java日记

标签
已于2022-6-15 17:12:59修改
收藏
回复
举报
回复
    相关推荐