首页 > 项目 > 当前页面

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、事务、缓存等众多功能实现的基础。

相关文章

  • svn的常见操作

    1、代码提交 直接commit即可 2、代码回滚 如果代码已经提交,你可以使用 svn merge 来回滚到某个特定的版本。 如果代码没有提交,可以使用 svn revert 来撤销本地修改。

    NEW个对象 2025-03-12

  • 微服务节点某一个节点出现了降级,但是其他服务都正常,是什么原因造成的?

    微服务节点某一个节点出现了降级,但是其他服务都正常,是什么原因造成的?微服务节点某一个节点出现了降级,但是其他服务都正常,是什么原因造成的?

    NEW个对象 2026-06-22

  • 多线程处理大数据集:如何将海量数据拆分并行计算提升处理效率

    多线程处理大数据集的核心思想是将大任务拆分为多个小任务,通过线程池并行执行后再汇总结果,从而提升整体计算效率。 在实际企业级应用中,常见的数据拆分方式包括分页拆分、ID范围拆分、时间区间拆分以及业务维度拆分。合理的任务切分策略往往比单纯增加线程数量更重要。 对于百万级数据,多线程已经能够带来显著收益;对于亿级数据,则需要结合线程池、分库分表、消息队列以及分布式计算框架共同构建完整的大数据处理体系。

    NEW个对象 2026-06-15

NEW个对象 NEW个对象
JAVA是世界上最好的语言