什么是 Bean 生命周期

来自姬鸿昌的知识库
Jihongchang讨论 | 贡献2024年7月21日 (日) 03:25的版本 →‎6.初始化后
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

Bean 生命周期描述的是 Spring 中一个 Bean 创建过程和销毁过程中所经历的步骤,

其中 Bean 创建过程是重点。

可以利用 Bean 生命周期机制对 Bean 进行自定义加工。

Bean 生命周期核心步骤(按顺序)

1.BeanDefinition 对象创建

Bean 定义

BeanDefinition 表示 Bean 定义,它定义了某个 Bean 的类型,Spring 就是利用 BeanDefinition 来创建 Bean 的,

比如需要利用 BeanDefinition 中 beanClass 属性确定 Bean 的类型,从而实例化出来对象。

2.构造方法推断

选出一个构造方法

一个 Bean 中可以有多个构造方法,此时就需要 Spring 来判断到底使用哪个构造方法,

这个过程是比较复杂的。

通过构造方法推断之后确定一个构造方法后,就可以利用构造方法实例化得到一个对象了。

3.实例化

构造方法反射得到对象

通过构造方法反射得到一个实例化对象,在 Spring 中,可以通过 BeanPostProcessor 机制对实例化进行干预。

4.属性填充

给属性进行自动填充

实例化所得到的对象,是“不完整”的对象,“不完整”的意思是该对象中的某些属性还没有进行属性填充,

也就是 Spring 还没有自动给某些属性赋值,属性填充就是通常说的自动注入、依赖注入。

5.初始化

对其他属性赋值、校验

在一个对象的属性填充之后,Spring 提供了初始化机制,可以利用初始化机制对 Bean 进行自定义加工,

比如可以利用 InitializingBean 接口来对 Bean 中的其他属性进行赋值,或对 Bean 中的某些属性进行校验。

6.初始化后

AOP、生成代理对象

初始化后是 Bean 创建生命周期中最后一个步骤,常说的 AOP 机制,

就是在这个步骤中通过 BeanPostProcessor 机制实现的,

初始化之后得到的对象才是真正的 Bean 对象。