自学内容网 自学内容网

【Spring Framework 源码阅读与笔记】Bean 的生命周期管理

Spring Framework 源码阅读与笔记

题目:Bean 的生命周期管理

  • 阅读 Spring 框架中 Bean 生命周期管理的相关源码,如 AbstractBeanFactoryBeanPostProcessor 等。
  • 分析 Bean 从创建到销毁的各个阶段,以及如何通过 BeanPostProcessor 进行拦截和处理。

笔记

1 核心类与方法介绍
1.1 AbstractBeanFactory

AbstractBeanFactory 是 Spring BeanFactory 的核心抽象类,负责管理 Bean 的整个生命周期。它将 Bean 的创建、初始化、依赖注入、销毁等操作抽象出来。

关键方法:

  • getBean():用于获取 Bean,先检查缓存,避免重复创建。
  • doGetBean():实现主要的创建和初始化逻辑。
  • createBean():执行 Bean 的实例化、依赖注入和初始化。
  • initializeBean():初始化过程中调用 BeanPostProcessorpostProcessBeforeInitializationpostProcessAfterInitialization 方法,并执行初始化方法。
1.2 BeanPostProcessor 接口

BeanPostProcessor 是 Spring 中的扩展接口,用于在 Bean 初始化前后进行自定义处理。

关键方法:

  • postProcessBeforeInitialization():初始化前对 Bean 进行处理。
  • postProcessAfterInitialization():初始化后对 Bean 进行处理(如代理增强)。

BeanPostProcessor 使得 Bean 的创建过程可插拔,常用于实现 AOP。


2 Bean 生命周期的主要阶段
2.1 实例化(Instantiation)

通过 createBeanInstance() 方法创建 Bean,使用反射调用构造器。

2.2 属性填充(Dependency Injection)

通过 populateBean() 进行依赖注入,设置 Bean 的依赖属性。

2.3 初始化前处理(Pre-Initialization)

在初始化前,Spring 调用 postProcessBeforeInitialization() 方法进行预处理。

2.4 初始化(Initialization)

调用 Bean 的初始化方法。若 Bean 实现了 InitializingBean 接口或配置了初始化方法,则执行相关方法。

2.5 初始化后处理(Post-Initialization)

初始化后,Spring 调用 postProcessAfterInitialization() 方法进行后处理。

2.6 销毁(Destruction)

容器关闭时,Spring 调用销毁方法,如 DisposableBean 接口的 destroy() 或自定义销毁方法。


3 源码结构分析
3.1 AbstractBeanFactory

负责 Bean 的创建、初始化、依赖注入和销毁等操作。

关键逻辑:

  • getBean():检查缓存,缓存未命中时调用 doGetBean() 创建 Bean。
  • doGetBean():完成 Bean 的创建与初始化。
  • createBean():通过反射创建 Bean,进行依赖注入和初始化。
  • initializeBean():调用 BeanPostProcessor 方法并执行初始化方法。
3.2 BeanPostProcessor 接口

提供了对 Bean 初始化前后的处理能力。

关键逻辑:

  • postProcessBeforeInitialization():初始化前的处理逻辑。
  • postProcessAfterInitialization():初始化后的处理逻辑(如增强)。
3.3 getBean() 方法分析

通过调试 getBean(),可以看到缓存检查过程和 doGetBean() 中的创建与初始化过程。

调试点:

  • 缓存检查:检查缓存是否已有 Bean。
  • doGetBean():未命中缓存时,进入 Bean 创建流程。
3.4 createBean() 方法分析

createBean() 负责实际的实例化、依赖注入和初始化过程。

调试点:

  • 实例化:通过反射创建 Bean。
  • 依赖注入:执行 populateBean(),填充 Bean 的依赖。
  • 初始化:调用 initializeBean(),执行初始化逻辑。
3.5 BeanPostProcessor 的处理

BeanPostProcessor 允许在 Bean 初始化前后插入自定义处理逻辑。

调试点:

  • 初始化前:查看 postProcessBeforeInitialization() 方法的处理过程。
  • 初始化后:分析 postProcessAfterInitialization() 方法的处理过程。

4 知识点总结
  1. Bean 生命周期管理:Spring 通过 AbstractBeanFactory 管理 Bean 从创建到销毁的完整生命周期。
  2. BeanPostProcessor 拦截机制:允许在 Bean 初始化前后执行自定义逻辑,是 AOP 的基础。
  3. 初始化方法调用:支持自动识别 InitializingBean 接口和自定义初始化方法,确保 Bean 正确初始化。
  4. 销毁方法调用:支持通过 DisposableBean 和自定义方法进行销毁处理,释放资源。

5 设计模式总结
5.1 代理模式(Proxy Pattern)
  • 应用场景BeanPostProcessor 实现了代理模式,允许在 Bean 初始化前后加入自定义处理(如 AOP 增强)。
  • 优势:将增强逻辑与业务逻辑分离,实现无侵入式的 Bean 增强。
5.2 工厂模式(Factory Pattern)
  • 应用场景AbstractBeanFactory 负责创建和管理不同类型的 Bean 实例。
  • 优势:封装 Bean 创建逻辑,提升代码可读性和可扩展性。
5.3 模板方法模式(Template Method Pattern)
  • 应用场景AbstractBeanFactory 提供了 Bean 生命周期管理的基本流程,具体逻辑由子类实现。
  • 优势:提取通用逻辑,子类可灵活扩展,保证框架的可扩展性和可维护性。

本文作者:鸿·蒙

文档工具:Typora

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 鸿·蒙 !


原文地址:https://blog.csdn.net/weixin_73286497/article/details/143835696

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!