Spring Bean 的生命周期是指从 Bean 被 Spring 容器创建、初始化、使用到销毁的整个过程。理解这一过程,能帮助你精准控制 Bean 的行为(如自定义初始化逻辑、资源释放),也是解决 Spring 容器相关问题的核心基础。
Spring Bean 的生命周期可分为核心流程和扩展流程,核心流程由 Spring 容器的核心容器(BeanFactory/ApplicationContext)主导,扩展流程则通过 Spring 提供的各种接口和注解实现自定义控制。
一、Spring Bean 生命周期的核心阶段(整体概览)
以ApplicationContext 容器(最常用的 Spring 容器,如 AnnotationConfigApplicationContext、ClassPathXmlApplicationContext)为例,Bean 的生命周期可概括为 8 个核心阶段,再加上扩展接口的增强,整体流程如下:
plaintext
1. 实例化(Instantiation)→ 2. 属性赋值(Populate)→ 3. 初始化前(PostProcessBeforeInitialization)→ 4. 初始化(Initialization)→ 5. 初始化后(PostProcessAfterInitialization)→ 6. 就绪(Ready)→ 7. 销毁前(PreDestroy)→ 8. 销毁(Destroy)
下面将逐阶段拆解,并结合关键接口、注解和代码示例详细说明。
二、各阶段详细解析(附代码实战)
1. 实例化(Instantiation)
- 作用:创建 Bean 的实例对象(相当于调用
new关键字)。 - 底层逻辑:Spring 容器通过反射调用 Bean 的构造方法(无参构造优先,若有参构造需通过
@Autowired或 XML 配置指定依赖)创建实例。 - 注意:此时 Bean 仅为 “空对象”,属性(如依赖的其他 Bean)尚未赋值。
2. 属性赋值(Populate Properties)
- 作用:为 Bean 的属性赋值(包括注入依赖的其他 Bean、基本类型属性等)。
- 实现方式:
- 自动注入:通过
@Autowired、@Resource等注解实现依赖注入; - XML 配置:通过
<property>标签指定属性值; - 注解配置:通过
@Value注入配置文件中的属性。
- 自动注入:通过
- 关键:这一阶段完成后,Bean 的所有依赖关系已被注入,属性值已初始化。
3. 初始化前(BeanPostProcessor 的 postProcessBeforeInitialization)
- 作用:全局前置处理,对所有 Bean 进行初始化前的统一增强(如修改属性值、添加代理等)。
- 核心接口:
BeanPostProcessor(Bean 后置处理器)的postProcessBeforeInitialization方法。- 该接口是 Spring 提供的核心扩展点,所有实现类会被 Spring 容器自动识别,作用于容器内所有 Bean。
- 返回值:可返回修改后的 Bean 实例(如代理对象),若返回
null则当前 Bean 会被忽略。
4. 初始化(Initialization)
这是 Bean 生命周期中自定义逻辑的核心阶段,Spring 提供了多种方式实现初始化逻辑,执行顺序为:

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



