Spring Boot Bean 的生命周期管理:从创建到销毁
引言
在 Spring Boot 应用中,Bean 是构成应用程序的基本构建块。它们由 Spring 容器(Application Context)负责创建、管理和维护。理解 Bean 的生命周期 (Bean Lifecycle) 对于开发者来说至关重要,这有助于我们在 Bean 的不同阶段执行自定义逻辑,例如初始化资源、清理连接等,从而更好地控制应用程序的行为。
本文将深入探讨 Spring Boot Bean 的生命周期,从 Bean 的实例化开始,逐步讲解属性填充、初始化、使用以及最终的销毁过程,并介绍在每个阶段可以使用的回调方法和扩展点。
一、Bean 的生命周期阶段
一个 Spring Boot Bean 从被 Spring 容器创建到最终销毁,通常会经历以下几个关键阶段:
-
实例化 (Instantiation): Spring 容器根据 Bean 的定义(例如
@Bean
注解、组件扫描等)创建 Bean 的实例。这通常通过调用 Bean 类的构造方法完成。 -
属性填充 (Population): 在 Bean 实例化之后,Spring 容器会将 Bean 定义中声明的依赖注入到 Bean 实例的属性中。这可以通过构造器注入、Setter 注入或字段注入等方式实现。
-
初始化 (Initialization): 这是 Bean 生命周期中最重要的阶段之一。Spring 提供了多种机制允许我们在 Bean 准备好被使用之前执行自定义的初始化逻辑:
-
InitializingBean
接口和afterPropertiesSet()
方法: 如果 Bean 实现了org.springframework.beans.factory.InitializingBean
接口,在所有必要的属性被设置之后,Spring 容器会调用其afterPropertiesSet()
方法。示例代码:
@Component public class MyBeanWithInitializingBean implements InitializingBean { @Override public void afterPropertiesSet() throws Exception { System.out.println("MyBeanWithInitializingBean 初始化完成 (afterPropertiesSet)"); // 执行自定义的初始化逻辑 } }
-
init-method
属性: 在@Bean
注解中,可以通过initMethod
属性指定一个在 Bean 初始化后调用的自定义方法。示例代码:
@Configuration public class AppConfig { @Bean(initMethod = "init") public MyBeanWithInitMethod myBeanWithInitMethod() { return new MyBeanWithInitMethod(); } } public class MyBeanWithInitMethod { public void
-