"李眉在排查内存泄漏时发现,飞翔科技的订单服务在重启时连接池没有关闭。白歌说:'你需要在Bean销毁时做清理。'这一章,你将掌握Spring Bean从诞生到死亡的完整生命周期,以及每一个可以介入的关键节点。"
Bean生命周期与作用域
本章定位
本章解决的核心问题:Bean被容器创建和注入之后,如何在初始化阶段完成资源准备、在销毁阶段完成资源释放,以及如何通过扩展点干预整个生命周期。
学习路线图
学习顺序说明:先建立生命周期全局视图 → 学习初始化阶段的两种标准方式(Spring接口 vs JSR-250注解) → 学习销毁阶段的两种标准方式 → 最后掌握两个最强大的扩展处理器,理解它们如何"包裹"整个容器。
文件关系说明
| 文件 | 一句话角色 |
|---|---|
Bean生命周期概述.md | 本章总纲,用一张时序图展示Bean从实例化到销毁的完整旅程。 |
InitializingBean.md | Spring标准初始化接口,实现afterPropertiesSet()完成初始化逻辑。 |
PostConstruct.md | JSR-250标准初始化注解,与InitializingBean形成"注解优先"的推荐方案。 |
PreDestroy.md | JSR-250标准销毁注解,标记需要在容器关闭前执行的清理方法。 |
DisposableBean.md | Spring标准销毁接口,实现destroy()完成资源释放逻辑。 |
BeanPostProcessor.md | Bean级别的后置处理器,在Bean初始化前后插入自定义逻辑(AOP的底层基础)。 |
BeanFactoryPostProcessor.md | 容器级别的后置处理器,在Bean定义加载后、实例化前修改配置元数据。 |
知识图谱
核心逻辑:生命周期分为"初始化"和"销毁"两大阶段;@PostConstruct/@PreDestroy是推荐的标准化方案;BeanPostProcessor是Spring扩展机制的基石(AOP代理就在此处织入);BeanFactoryPostProcessor则站在更高维度,在Bean尚未诞生时修改容器配置。
与下一章的衔接
本章学完后,你已经理解了Bean的完整生命周期和扩展机制。下一章「AOP面向切面编程」将解决:如何将横切关注点(日志、权限、事务)从业务代码中剥离,实现模块化——而AOP的核心实现正是依托于本章所学的BeanPostProcessor,在Bean初始化阶段动态创建代理对象。没有生命周期基础,就无法真正理解AOP的底层原理。