# 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
的概念。
拓展点讲解