Spring bean的生命周期

单例的实例化过程:

AbstractBeanFactory的#createBean

 

createBean方法里进去, 会看到这里允许提前创建一个Bean实例返回

 

 进AbstractAutowireCapableBeanFactory#doCreateBean,

这几步比较重要:

 

 1.允许修改后的合并定义

2.提前暴露bean 解决循环引用

3.属性填充

这两种可不做属性填充返回 InstantiationAwareBeanPostProcessor#postProcessAfterInstantiation  和  InstantiationAwareBeanPostProcessor#postProcessProperties, 

 

 4.初始化 initializeBean:

 

主要走这四个步骤

1).  BeanPostProcessor#postProcessBeforeInitialization 

2). ((InitializingBean) bean).afterPropertiesSet();    执行bean的自定义初始化操作    注解会使用InitializingBean

3). 初始化: 这一步是通过反射执行初始化方法 Method methodToInvoke = ClassUtils.getInterfaceMethodIfPossible(initMethod);       methodToInvoke.invoke(bean);

4).  BeanPostProcessor#postProcessAfterInitialization

 

5. 下面就是提前暴露引用对象的单例对象初始化, 这里是三级缓存 

 

至此, bean就可以正常使用

 

 

 

销毁

DisposableBean#destroy 方法

 

posted @ 2021-07-01 05:38  圣金巫灵  阅读(57)  评论(0编辑  收藏  举报