聊一聊Spring Bean 的生命周期

聊一聊Spring Bean 的生命周期

💡 原文中文,约5900字,阅读约需14分钟。
📝

内容提要

Spring Bean 的生命周期包括实例化、属性填充、初始化和销毁四个主要步骤。实例化通过反射创建 Bean 实例,属性填充使用注解注入对象,初始化调用回调函数进行预处理,销毁则记录销毁方法以便释放资源。这些步骤的理解对面试和实际开发非常重要。

🔎

延伸解读

生命周期本质:doCreateBean 方法的执行逻辑

面试中常问的 Spring Bean 生命周期,实际上对应的是 AbstractAutowireCapableBeanFactory#doCreateBean 方法的执行逻辑。该方法主要完成四件事:实例化、属性填充、初始化和销毁方法注册。理解这一点,就能将零散的知识点串联起来,而不是死记硬背步骤。

实例化与初始化的区别

实例化是通过反射创建 Bean 实例的过程,而初始化是调用回调函数对 Bean 进行预处理。实例化发生在 createBeanInstance 方法中,初始化则发生在 initializeBean 方法中。明确区分这两个阶段,有助于理解 Spring 在 Bean 创建过程中的不同处理逻辑。

初始化阶段的扩展点与执行顺序

初始化阶段依次触发 Aware 接口方法、BeanPostProcessor 的前置处理、初始化方法(如 InitializingBean 的 afterPropertiesSet 或 XML 配置的 init-method)以及 BeanPostProcessor 的后置处理。需要注意的是,@PostConstruct 注解的方法是通过 BeanPostProcessor 处理的,与 XML 配置的 init-method 底层逻辑不同。

销毁方法的注册与资源释放

销毁阶段并非立即销毁 Bean,而是记录销毁方法,以便在容器关闭时调用以释放资源。可以通过 @PreDestroy 注解、XML 的 destroy-method 属性、实现 DisposableBean 接口或 AutoCloseable 接口来定义销毁逻辑。理解这一点有助于正确管理 Bean 的生命周期和资源清理。

❓

Q&A

Spring Bean 的生命周期包括哪些主要步骤?

Spring Bean 的生命周期包括实例化、属性填充、初始化和销毁四个主要步骤。

Spring Bean 的实例化是如何实现的?

Spring Bean 的实例化是通过反射创建 Bean 实例的过程,具体在 createBean 方法中完成。

属性填充在 Spring Bean 生命周期中是如何进行的?

属性填充通过 populateBean 方法处理注入的对象和字符串,使用注解如 @Autowired 和 @Value。

Spring Bean 的初始化阶段包含哪些操作?

初始化阶段包括触发 Aware 接口方法、执行 BeanPostProcessor 的前后处理、调用初始化方法。

Spring Bean 的销毁方法是如何注册的?

销毁方法可以通过注解、XML 配置或实现 DisposableBean 接口来定义,销毁时会调用这些方法释放资源。

如何处理 Spring Bean 的循环依赖问题?

在实例化过程中,Spring 通过三级缓存来处理循环依赖,确保 Bean 的引用一致性。

🏷️

标签

➡️

继续阅读