前言
本文不涉及任何源码,仅仅涉及一些概念上的一些说明,什么是Bean 生命周期 ,注意此Bean 生命周期不是指的类的生命周期,而是 一个 Class 是怎么一步一步 形成 一个spring 管理的Bean的,
为什么要说这个东西,因为只有当你理解了 Bean的生命周期你才能理解 为什么 AutowiredAnnotationBeanPostProcessor 属性注入是放在 属性赋值 、依赖注入,而不是放在初始化方法回调,等等一系列 BeanPostProcessor 的处理
什么是Bean 生命周期
spring bean 生命周期不是说 Bean 创建 和销毁的过程,而是 Class 一步一步 从创建对象到一个合格的 Bean 这里的 Bean 可以理解为 我们创建的对象,但是你怎么能保证这个 对象是原生的还是代理的呢?
Bean生命周期步骤
- bean 加载成 BeanDefinition
- bean 实例化
- bean 属性赋值 & 依赖注入
- bean 初始化方法回调
其主要流程是这些,在这些主要流程的执行下又分了 各种各样的处理,比如:BeanPostProcessor 又或者 Aware,通过这一些列的回调、处理组成了 spring - bean 完整的生命周期
说明
在初始化方法调用的时候会去执行 一些 Aware的回调,在执行 初始化方法的时候会去执行 Before 的处理
当执行完初始化方法后也会去执行 After 去处理,但是这些严格来说都仅仅是属于 初始化方法 步骤之一
Spring对于bean的生命周期阶段划分的很明确,就是一个阶段只能由一个阶段对应能干事的来处理,为啥这么说呢?其实如果按说实现的话 那其实 属性赋值和 依赖注入都能 放到 初设方法哪里进行处理,但是为了明确性,所以进行了划分,
后言
个人理解,如有不对,或者哪里有问题,可以相互探讨,也可斧正