Spring生命周期都有哪些阶段
- 软件开发
- 2025-09-12 17:00:03

Spring Bean 的生命周期: 创建(实例化)—初始化(初始化前,初始化,初始化后)—就绪并可用—销毁(销毁前,销毁,销毁后) 以下为你详细介绍这些阶段及其作用。
1. 实例化(Instantiation) 描述:这是 Spring Bean 生命周期的起始点,Spring 容器根据 Bean 的定义信息,利用反射机制调用 Bean 类的构造函数来创建 Bean 的实例。此阶段只是在内存中分配了对象的空间,还未对其属性进行赋值。示例: // 定义一个简单的 Bean 类 public class MyBean { public MyBean() { System.out.println("MyBean 实例化"); } } 2. 属性赋值(Populate Properties) 描述:在 Bean 实例创建完成后,Spring 容器会根据 Bean 的定义信息,将依赖的其他 Bean 或属性值注入到该 Bean 中。可以通过构造函数注入、Setter 方法注入或字段注入等方式实现。示例(Setter 方法注入): public class MyBean { private AnotherBean anotherBean; public void setAnotherBean(AnotherBean anotherBean) { this.anotherBean = anotherBean; System.out.println("MyBean 属性赋值"); } } 3. 初始化前(Initialization - Before) 描述:此阶段会调用 BeanPostProcessor 的 postProcessBeforeInitialization 方法。BeanPostProcessor 是 Spring 提供的一个扩展点,允许开发者在 Bean 初始化前后进行自定义处理。可以在这个方法中对 Bean 进行额外的处理,如修改 Bean 的属性等。示例: import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; public class MyBeanPostProcessor implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println("MyBean 初始化前处理,Bean 名称: " + beanName); return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { return bean; } } 4. 初始化(Initialization) 4.1 实现 InitializingBean 接口 描述:如果 Bean 实现了 InitializingBean 接口,Spring 容器会调用其 afterPropertiesSet 方法。该方法通常用于在 Bean 的属性注入完成后进行一些初始化操作。示例: import org.springframework.beans.factory.InitializingBean; public class MyBean implements InitializingBean { @Override public void afterPropertiesSet() throws Exception { System.out.println("MyBean 实现 InitializingBean 接口的初始化方法调用"); } } 4.2 自定义初始化方法 描述:可以通过在 Bean 定义中指定自定义的初始化方法,Spring 容器会在 Bean 的属性注入完成后调用该方法。示例(Java 配置): import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { @Bean(initMethod = "customInit") public MyBean myBean() { return new MyBean(); } } public class MyBean { public void customInit() { System.out.println("MyBean 自定义初始化方法调用"); } } 5. 初始化后(Initialization - After) 描述:此阶段会调用 BeanPostProcessor 的 postProcessAfterInitialization 方法。同样是利用 BeanPostProcessor 这个扩展点,开发者可以在 Bean 初始化完成后进行自定义处理,如对 Bean 进行代理包装等。示例:参考初始化前阶段的 MyBeanPostProcessor 类。 6. 就绪并可使用(Ready to Use) 描述:经过上述步骤后,Bean 已经完成了初始化过程,处于就绪状态,可以被应用程序使用。此时,应用程序可以通过 Spring 容器获取该 Bean 并调用其方法。 7. 销毁前(Destruction - Before) 描述:当 Spring 容器关闭时,在销毁 Bean 之前,如果有相关的销毁前处理器,会执行相应的操作。不过这不是 Spring 标准生命周期中默认的阶段,可能需要开发者自定义实现。 8. 销毁(Destruction) 8.1 实现 DisposableBean 接口 描述:如果 Bean 实现了 DisposableBean 接口,Spring 容器会调用其 destroy 方法。该方法通常用于在 Bean 销毁前进行一些资源释放操作,如关闭数据库连接、释放文件句柄等。示例: import org.springframework.beans.factory.DisposableBean; public class MyBean implements DisposableBean { @Override public void destroy() throws Exception { System.out.println("MyBean 实现 DisposableBean 接口的销毁方法调用"); } } 8.2 自定义销毁方法 描述:可以通过在 Bean 定义中指定自定义的销毁方法,Spring 容器会在关闭时调用该方法。示例(Java 配置): import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { @Bean(destroyMethod = "customDestroy") public MyBean myBean() { return new MyBean(); } } public class MyBean { public void customDestroy() { System.out.println("MyBean 自定义销毁方法调用"); } } 9. 销毁后(Destruction - After) 描述:Bean 经过销毁操作后,实例被销毁,其所占用的资源被释放,不再可用。综上所述,Spring Bean 的生命周期涵盖了从创建到销毁的多个阶段,开发者可以通过实现特定的接口或指定自定义方法来控制 Bean 的初始化和销毁过程,以满足不同的业务需求。
Spring生命周期都有哪些阶段由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Spring生命周期都有哪些阶段”