简述Spring Bean生命周期

本文详细介绍了Spring框架中Bean的完整生命周期,包括实例化、属性设置、初始化及销毁等关键步骤,并解释了各步骤的功能和作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

前言

在Spring容器里,Bean的完整生命周期比较长。但是我们必须要掌握它。

Bean周期总览

Bean周期总体如下所示。
在这里插入图片描述
接下来会简单讲下各个步骤的主要功能。

Bean实例化

必须步骤。
此步骤主要是实例化一个Bean,例如new一个对象。这个步骤主要是设置bean的作用域等操作。

设置属性

必须步骤。
这个主要是按照Spring Context对实例化的Bean进行配置,也就是常说的IOC注入。

setBeanName

非必须。
如果当前Bean已经实现了BeanNameAware接口,会调用它实现的SetBeanName方法。

setBeanFactory

非必须。
如果当前Bean实现了BeanFacoryAware接口,会调用它实现的setBeanFactory方法。

setApplicationContext

非必须。
如果这个 Bean 实现了 ApplicationContextAware 接口,会调用setApplicationContext方法。

初始化预处理

非必须。
如果Bean实现BeanPostProcessor接口,将会调用执行postProcessBeforeInitialization方法。

可以看下项目的拦截器的代码实现

afterPropertiesSet

非必须。
如果bean实现了InitializingBean,则执行afterPropertiesSet,执行属性设置之后的操作

Bean初始化

非必须。
如果 Bean 在 Spring 配置文件中配置了 init-method 属性会自动调用其配置的初始化方法

初始化后处理

非必须。
如果Bean实现BeanPostProcessor接口,将会调用执行postProcessAfterInitialization方法。

以上工作完成以后就可以应用这个 Bean 了

Bean过期自动清理

当 Bean 不再需要时,会经过清理阶段,如果 Bean 实现了DisposableBean 这个接口,会调用那个其实现的 destroy()方法

自定义销毁方法

如果这个 Bean 的 Spring 配置中配置了 destroy-method 属性,会自动调用其配置的销毁方法。

以上就是spring bean的完整生命周期。如果你觉得对你有帮助,可以收藏下,免得下次找不到了。

Spring框架中Bean生命周期是其IoC容器管理的重要部分,涉及从创建到销毁的完整流程。这一过程主要包括以下几个关键阶段: 1. **实例化Bean**:Spring容器根据BeanDefinition中的信息,通过反射机制创建Bean的实例。这个过程中,容器会调用构造函数或工厂方法来生成Bean对象[^2]。 2. **属性填充**:在Bean实例创建后,Spring容器会根据BeanDefinition中的配置信息,为Bean的属性设置值。这些值可以是基本数据类型、其他Bean的引用,或者是集合等复杂类型[^2]。 3. **Aware接口回调**:如果Bean实现了某些特定的Aware接口(如`BeanNameAware`、`BeanClassLoaderAware`、`BeanFactoryAware`等),Spring容器会在适当的时候调用这些接口的方法,使得Bean能够获取到自身的名称、类加载器或BeanFactory等信息。例如,实现`BeanNameAware`接口的Bean可以通过`setBeanName`方法获取其在容器中的名称[^3]。 4. **初始化前处理**:如果存在实现了`BeanPostProcessor`接口的处理器,Spring容器会在初始化前调用`postProcessBeforeInitialization`方法对Bean进行预处理。此步骤允许开发者在Bean初始化之前对其进行修改或增强[^5]。 5. **初始化方法调用**:接下来,Spring容器会调用Bean的初始化方法。这可以通过在Bean定义中指定`init-method`属性来实现,或者通过实现`InitializingBean`接口并重写`afterPropertiesSet`方法。在这个阶段,Bean通常会完成一些必要的准备工作,比如建立数据库连接、加载资源文件等[^5]。 6. **初始化后处理**:同样地,如果有`BeanPostProcessor`处理器存在,Spring容器还会调用`postProcessAfterInitialization`方法对Bean进行后续处理。此步骤可用于进一步增强Bean的功能[^5]。 7. **使用阶段**:经过上述步骤之后,Bean已经准备好并可以被应用程序正常使用了。在此期间,Bean可能会被多次调用以执行业务逻辑。 8. **销毁前处理**:当Spring容器关闭时,它会调用Bean的销毁方法。这可以通过在Bean定义中指定`destroy-method`属性来实现,或者通过实现`DisposableBean`接口并重写`destroy`方法。在这个阶段,Bean通常会释放占用的资源,如关闭数据库连接、清理临时文件等。 在整个生命周期中,Spring提供了丰富的扩展点,允许开发者通过各种方式参与到Bean的创建和管理过程中,从而实现更加灵活和强大的应用架构。 ### Bean生命周期示例代码 下面是一个简单的示例,展示了如何利用Spring生命周期回调方法: ```java import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; public class UserService implements InitializingBean, DisposableBean { @Override public void afterPropertiesSet() throws Exception { System.out.println("初始化方法调用:准备数据库连接..."); } public void doSomething() { System.out.println("执行业务逻辑..."); } @Override public void destroy() throws Exception { System.out.println("销毁方法调用:关闭数据库连接..."); } } ``` 此外,还可以通过自定义`BeanPostProcessor`来干预Bean的初始化前后的行为: ```java import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; public class CustomBeanPostProcessor implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if ("userService".equals(beanName)) { System.out.println("初始化前处理:" + beanName); } return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { if ("userService".equals(beanName)) { System.out.println("初始化后处理:" + beanName); } return bean; } } ``` 以上代码演示了如何利用Spring框架提供的生命周期回调机制以及`BeanPostProcessor`接口来控制Bean的行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沛哥儿

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值