Spring Bean 的生命周期笔记
1.加载Bean定义
通过 loadBeanDefinitions 扫描所有xml配置、注解将Bean记录在beanDefinitionMap中
2.创建Bean对象
通过 createBean 遍历 beanDefinitionMap 创建bean
2.1.构建对象
- 容器通过 createBeanInstance 进行对象构造
2. 获取构造方法:@Autowired - 准备参数 根据类查找>参数名查找
- 构造对象
- 无参对象直接实例化
2.2.填充属性
通过populateBean方法为Bean内部所需的属性进行赋值
- 通常是 @Autowired 注解的变量
2.3.初始化Bean对象
通过initializeBean对填充后的实例进行初始化
填充初始化容器相关信息
通过 **invokeAwareMethods **方法:为实现aware接口【信息感知接口】的Bean 设置注入beanName、beanFactory等容器信息
初始化构造方法
通过 **invokeInitMethods **方法进行初始化:
如果Bean实现InitializingBean接口进行处理【未实现则不进行】
- afterPropertiesSet方法【bean填充属性后执行】
- initMethod 方法
Bean的后置处理
在**invokeInitMethods **的前后进行
- applyBeanPostProcessorsBeforeInitialization
- **invokeInitMethods **
- applyBeanPostProcessorsAfterInitialization
在后置处理中处理了包括:AOP【AnnotationAwareAspectJAutoProxyCreator】
负责 构造后@PostConstruct 和 销毁前@PreDestroy 的 InitDestoryAnnotationBeanPostProcessor 等
注册销毁
通过reigsterDisposableBean处理实现了DisposableBean接口的Bean的注册
3.添加到单例池
通过 addSingleton 方法,将Bean 加入到单例池 singleObjects
4.销毁
4.1.销毁前
调用 bean中@PreDestory 注解的方法
通过 postProcessBeforeDestruction 方法调用destoryBean逐一销毁Bean
4.2.销毁
调用 destoryBeans
4.3.执行客户自定义销毁
调用 invokeCustomDestoryMethod
最后感谢B站up主 猿人林克 的分享
https://www.bilibili.com/video/BV1584y1r7n6/?spm_id_from=333.788&vd_source=21f24877c5ff5eae284dc31c34e43786