spring Bean加载流程

一、读取注解

先通过扫描指定路径下的spring注解或者XML配置,然后将其解析并封装到BeanDefintaion这个接口的实现类中。

二、bean生命周期

2.1 实例化

AbstractAutoWireCapableBeanFactory.doCreateBean中会调用createBeaninstance()方法,该阶段主要是从beanDefinitionMap循环读取bean,获取他的属性,然后利用反射读取对象的构造方法,进行实例化对象,此时是一个空对象在JVM堆中所有属性并未赋值

2.2 初始化

初始化包括两个步骤,一个是属性填充,另一个是具体初始化过程,比如Bean PostProcessor后置处理器,具体初始化。

属性赋值
PopulateBean()会对bean的依赖属性进行填充,@Autowirde注解注入就发生在这个阶段,若Bean有很多依赖的对象,则Spring会依次调用这些依赖的对象进行实例化,注意可能会出现循环依赖。

初始化
初始化即将bean放入Spring的缓存中、填充我们预设的属性并进一步做后置处理。

2.3使用

初始化完成之后 加载到spring容器中,程序中可以调用。

2.4 销毁

随着Spring的关闭,SpringBean会被移除,此时Bean的生命周期结束。

3、解决循环依赖

三级缓存技术:spring依次从一级、二级、三级缓存中获取对象,首次创建对象先实例化在三级缓存中,实例化完成之后,移到一级缓存中。下次寻找时,则会在一级缓存中寻找。
设A->B,B->A,根据加载顺序,创建A时,先对其进行实例化及初始化,此时寻找A的属性B,B经过实例化和初始化,也开始寻找依赖A,此时去一级缓存中可以查到A,则将其返回给B,由此,成功将其初始化。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值