spring源码之bean生命周期

谈到spring bean的生命周期,相信很多同学或多或少的能说出几个步骤,大部分应该都是从网上扒一扒,然后背一背,理解的不是那么深刻,更别提应用了那么今天我们来通过源码的形式来看一看bean创建的整个流程

 

流程图

image.png

图一

 

源码分析

 

首先我们从入口处找到核心的创建逻辑,如下图

 

doCreateBean方法包含了bean创建的全过程,接下来开始着重分析图一的这几个步骤

 

1.实例化

 

在doCreateBean中有一个方法createBeanInstance,见名知意 创建bean实例,继续深入

 

image.png

image.png

image.png

终于看到我们熟悉的代码了,通过class对象获取声明的构造方法,然后传给BeanUtils的instantiateClass()方法,然后我们看一下instantiateClass这个方法做了什么事情,

image.png

一目了然,通过反射创建实例返回,实例化结束。

 

2.属性填充

 

我们返回到AbstractAutowireCapableBeanFactory的doCreateBean()方法继续往下看,

image.png

populateBean方法就做了属性填充这个工作,我们找一个地方感受一下

image.png

其中参数psv里面有一个PropertyValue list 存的就是属性名和值,至此,属性填充完成。

 

3.执行setXXXAware方法

 

紧挨着populateBean完成之后,执行initializeBean方法

image.png

图二

invokeAwareMethods是执行aware方法

image.png

由这个方法,我们可以看到只要是实现了BeanNameAware、BeanClassLoaderAware或者BeanFactoryAware,便执行它的set方法,此步骤完成。

 

4.执行BeanPostProcessor的postProcessBeforeInitialization方法

 

在图二里面调用了applyBeanPostProcessorsBeforeInitialization方法,

image.png

遍历beanPostProcessor,然后执行,完成。

 

5.执行afterPropertiesSet、init-method

 

继续看 图二,invokeInitMethods方法,

image.png

先执行执行afterPropertiesSet方法,再去调用invokeCustomInitMethod方法执行init-method。

 

通过以上步骤,bean创建完成。

 

6.执行DisposableBean的destroy方法、destroy-method

 

在doCreateBean的最后注册了destroy方法,但是执行是在容销毁的时候,通过跟踪代码可以找到如下地方

image.png

以上便是bean从创建到销毁的过程

 

结语

 

通过以上分析,我们可以清楚的理解到在整个过程当中,哪些地方是扩展给我们的东西,如果有必要的话,可以在这些点上加入我们业务上的东西

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值