spring boot 503_Spring中bean的生命周期

关注公众号:小李不秃

在Spring容器中,主要是对bean进行管理的,而我们创建的bean其实是有对应的生命周期,我们需要对这个生命周期有一个了解。其实Spring这个对bean的生命周期就是对传统的java的生命周期给复杂化一些。那下面我就了解下bean的生命周期。

c2c8d79c058d7659838100a4c5cacd3a.png


bean的生命周期(网上的图)

8863b8fd5ced9419e884e9e57e383420.png


bean的生命周期

在Spring中bean的生命周期就像我们在上面的图片看到一样,加了一些过滤条件(黑色框的平时基本上不会用到)。那分别介绍下上面的流程

1.Spring对bean进行实例化,调用bean的构造参数

2.设置对象属性,调用bean的set方法,将属性注入到bean的属性中

3.检查bean是否实现BeanNameAware、BeanFactoryAware、ApplicationContextAware接口,如果实现了这几个接口Spring会分别调用其中实现的方法。

BeanNameAware:setBeanName(String name)方法,参数是bean的ID

BeanFactoryAware:setBeanFactory(BeanFactory bf)方法,参数是BeanFactory容器

ApplicationContextAware:setApplicationContext(ApplicationContext context)方法,参数是bean所在的引用的上下文,如果是用Bean工厂创建bean,那就可以忽略ApplicationContextAware

4.如果bean是否实现BeanPostProcessor接口,Spring会在初始化方法的前后分别调用postProcessBeforeInitialization和postProcessAfterInitialization方法

5.如果bean是否实现InitalizingBean接口,将调用afterPropertiesSet()方法

6.如果bean声明初始化方法,也会被调用

7.使用bean,bean将会一直保留在应用的上下文中,直到该应用上下文被销毁。

8.检查bean是否实现DisposableBean接口,Spring会调用它们的destory方法

9.如果bean声明销毁方法,该方法也会被调用

接下来我们看看代码:

实体类 TestBean

分别实现了BeanNameAware、BeanFactoryAware、ApplicationContextAware、InitalizingBean、DisposableBean接口

cec0f07125f7e6f57dd7321c26c3d750.png


实体类

MySpringBeanPostProcessor实现了BeanPostProcessor接口

6a66918af7450987b2b432acf244420c.png


MySpringBeanPostProcessor类

通过java配置对进行bean的创建,要注意一点我们要自定义初始化和销毁方法,需要在initMethod和destroyMethod两个方法分别写上对应的方法名。这个销毁方法需要注意,如果是和DisposableBean接口是同一个方法,那么只会执行一次。但如果两个不一样的方法,那么就会先执行DisposableBean的detroy方法,在执行自定义销毁方法。

85d66ef93efd4b6df29cf008c51f2d38.png


AnimalConfig类

加载上下文应用

b74a82f9ab9fa21dc85d17bebd4e17a1.png


加载上下文

从输出结果,我们就可以清楚地看到整个bean的生命周期。

90cabb004dd7cd30dd72dd909f66adaa.png


运行结果

其实对于这一块,我们了解下就可以了,因为真正用到的话其实不多,但我们还是要清楚bean的生命周期,会对之后学习或者工作都会有很大的帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值