栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring Bean加载流程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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,由此,成功将其初始化。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/591397.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号