Spring Bean 的生命周期
2026-06-24
NEW个对象
📌 Spring Bean 的生命周期
Spring Bean 从创建到销毁并不是一次简单的 new 对象,而是经过 Spring IoC 容器的一系列管理流程,包括实例化、依赖注入、初始化、使用以及销毁等多个阶段,Spring 还提供了大量扩展接口允许开发者介入生命周期。
🎯 生命周期流程
BeanDefinition加载
↓
实例化 Bean(Constructor)
↓
属性注入(依赖注入)
↓
Aware 接口回调
↓
BeanPostProcessor 前置处理
↓
@PostConstruct
↓
InitializingBean.afterPropertiesSet()
↓
init-method
↓
BeanPostProcessor 后置处理(AOP代理在这里生成)
↓
Bean 可以正常使用
↓
容器关闭
↓
@PreDestroy
↓
DisposableBean.destroy()
↓
destroy-method
🚀 生命周期各阶段
- ① BeanDefinition 注册:Spring 扫描配置类或 XML,将 Bean 定义注册到 IoC 容器。
- ② 实例化 Bean:通过构造方法创建对象。
- ③ 属性填充:完成 @Autowired、@Resource 等依赖注入。(有的属性还有注入,比如没有标注 @Autowired的属性)
- ④ Aware 回调:如果实现 BeanNameAware、BeanFactoryAware、ApplicationContextAware 等接口,会注入对应对象。
- ⑤ BeanPostProcessor 前置处理:初始化之前执行,可修改 Bean。
- ⑥ 初始化:依次执行 @PostConstruct、afterPropertiesSet()、init-method。(注入其他属性)
- ⑦ BeanPostProcessor 后置处理:初始化完成后执行,Spring AOP 动态代理通常在这里创建。
- ⑧ Bean 使用:业务代码正常调用 Bean。
- ⑨ Bean 销毁:容器关闭时依次执行 @PreDestroy、destroy()、destroy-method。
💡 常见扩展点
| 扩展接口 | 作用 |
|---|---|
| BeanPostProcessor | Bean 初始化前后增强(AOP 核心) |
| InstantiationAwareBeanPostProcessor | 实例化阶段扩展 |
| BeanFactoryPostProcessor | 修改 BeanDefinition |
| InitializingBean | 初始化回调 |
| DisposableBean | 销毁回调 |
✅ 面试总结
Spring Bean 生命周期可以概括为:
实例化 → 属性注入 → Aware 回调 → BeanPostProcessor 前置 → 初始化(@PostConstruct、afterPropertiesSet、init-method) → BeanPostProcessor 后置(AOP) → Bean 使用 → Bean 销毁(@PreDestroy、destroy、destroy-method)。
其中 BeanPostProcessor 是整个生命周期中最重要的扩展点,也是 Spring AOP、事务、缓存等众多功能实现的基础。
Spring Bean 生命周期可以概括为:
实例化 → 属性注入 → Aware 回调 → BeanPostProcessor 前置 → 初始化(@PostConstruct、afterPropertiesSet、init-method) → BeanPostProcessor 后置(AOP) → Bean 使用 → Bean 销毁(@PreDestroy、destroy、destroy-method)。
其中 BeanPostProcessor 是整个生命周期中最重要的扩展点,也是 Spring AOP、事务、缓存等众多功能实现的基础。
相关文章
-
算法常用的函数
1、求一个数的n的m次方
NEW个对象 2025-01-13
-
Kafka 是否会弄丢数据?
当然会 kafka分为生产者、服务端、消费端
NEW个对象 2025-01-11
-
给第三方提供接口需要注意哪些?
给第三方提供接口需要注意哪些? 1、需要做授权,在项目中集成OAuth2。 2、如果不需要授权,提供API密钥,一个字符串,可以通过UUID生成。 3、从安全的角度,可以进行加密解密、加签验签。 4、自我保护机制,可以对接口进行限流处理。
NEW个对象 2024-10-29
NEW个对象
JAVA是世界上最好的语言