# Spring Bean 的生命周期
大致流程:
本文将从以下两方面去帮助理解 Bean 的生命周期:
- 生命周期的概要流程:对
Bean的生命周期进行概括,并且结合代码来理解; - 扩展点的作用:详细介绍
Bean生命周期中所涉及到的扩展点的作用。
# 生命周期的概要流程
Bean 的生命周期概括起来就是 4 个阶段:
-
实例化(
Instantiation) -
属性赋值(
Populate) -
初始化(
Initialization) -
销毁(
Destruction) -
实例化:第
1步,实例化一个bean对象; -
属性赋值:第
2步,为bean设置相关属性和依赖; -
初始化:第
3~7步,步骤较多,其中第5、6步为初始化操作,第3、4步为在初始化前执行,第7步在初始化后执行,该阶段结束,才能被用户使用; -
销毁:第
8~10步,第8步不是真正意义上的销毁(还没使用呢),而是先在使用前注册了销毁的相关调用接口,为了后面第9、10步真正销毁bean时再执行相应的方法。
下面我们结合代码来直观的看下,在 doCreateBean() 方法中能看到依次执行了这 4 个阶段:
1 | // AbstractAutowireCapableBeanFactory.java |
由于初始化包含了第 3~7 步,较复杂,所以我们进到 initializeBean() 方法里具体看下其过程(注释的序号对应图中序号):
1 | // AbstractAutowireCapableBeanFactory.java |
在 invokInitMethods() 方法中会检查 InitializingBean 接口和 init-method 方法,销毁的过程也与其类似:
1 | // DisposableBeanAdapter.java |
从 Spring 的源码我们可以直观的看到其执行过程,而我们记忆其过程便可以从这 4 个阶段出发,实例化、属性赋值、初始化、销毁。其中细节较多的便是初始化,涉及了 Aware、BeanPostProcessor、InitializingBean、init-method 的概念。
拓展点讲解