Loading

Spring Bean 的生命周期笔记

1.加载Bean定义

通过 loadBeanDefinitions 扫描所有xml配置、注解将Bean记录在beanDefinitionMap中

2.创建Bean对象

通过 createBean 遍历 beanDefinitionMap 创建bean

2.1.构建对象

  1. 容器通过 createBeanInstance 进行对象构造
    2. 获取构造方法:@Autowired
  2. 准备参数 根据类查找>参数名查找
  3. 构造对象
    1. 无参对象直接实例化

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

posted @ 2022-12-20 11:27  ZJH_BLOGS  阅读(33)  评论(0编辑  收藏  举报