Spring对Bean生命周期的管理

SpringBean加载的全过程
首先分为几个大部分,然后spirng会对这个每个小部分的前后进行操作。
实例化
填充注入
初始化
使用
销毁
一、实例化
在我们实例化一个bean之前,我们有机会对它的BeanDefinition以及对IOC容器进行操作。
这里主要介绍的有BeanDefinitionRegistryPostProcessor和BeanFactoryPostProcessor这两个接口,其中BeanDefinitionRegistryPostProcessor继承BeanFactoryPostProcessor,这两个都是容器级别的接口,但是在bean的生命周期中又至关重要,所以一起说了。
在我们实例化bean之前,会调用BeanDefinitionRegistryPostProcessor的实现类的postProcessBeanDefinitionRegistry方法和postProcessBeanFactory(这个方法是BeanFactoryPostProcessor,因为两者是继承关系,所以需要对这个接口进行实现),对我们的beanFactory,beanDefinition进行一些修改重定义。
在我们执行bean类构造函数之前,会调用InstantiationAwareBeanPostProcessor的postProcessBeforeInstantiation.(具体什么作用没了解过)。
接下来就是进行实例化,调用bean类的构造函数进行实例化。(通过cglib或者jdk自带的动态代理进行实例化)

二.属性注入
实例化后,会调用InstantiationAwareBeanPostProcessor的postProcessAfterInstantiation来判断是否需要进行属性填充,如果该方法返回的是false,则代码不需要进行属性填充。
如果上述InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation返回的为true,则调用InstantiationAwareBeanPostProcessor.postProcessPropertyValues进行属性设置。

三.初始化
在初始化之前,会判断bean是否实现了BeanNameAware,BeanClassLoaderAware,BeanFactoryAware这三个接口,如果实现了进行接口实现的调用。
调用BeanPostProcessor的postProcessBeforeInitialization进行前置处理。
接下来进行初始化操作,判断是否该bean是否实现了InitializingBean,如果实现了调用它的afterPropertiesSet方法。
判断是否配置了init-method方法,如果配置,则调用这个方法
初始化完成后,调用BeanPostProcessor的后置处理方法,即postProcessAfterInitialization.

四.使用
接下来就是使用了。

五.销毁
最后在程序关闭的时候,如果bean类实现了DisposableBean接口,则调用它的destroy进行销毁。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值