spring循环依赖
2020-10-18 09:25:00 32 举报
spring循-环-依-赖
作者其他创作
大纲/内容
3. getBean(beanName)去获取bean
开始X的生命周期
3.1 第一次getSinglton(beanName){span style=\"font-size: inherit;\
y的生命周期创建key = y
AbstractAutowireCapableBeanFactory$lambda@ 3042
singletonFactories================================================
X注入Y
此时bean-y:@2941内为:y-->{x = null}
属性x:
此时bean-x: @2749 内为:x-->{y = null}
AbstractAutowireCapableBeanFactory$lambda@3243
二级缓存 : 对象工厂 singletonFactories底层结构: HashMap作用: 存放正在创建的bean提前暴露的对象工厂
singletonsCurrentlyInCreation底层结构: set集合包装了一个HashMap作用: 存放正在创建过程中的bean
font color=\"#cc0066\" style=\"\
删除x的工厂对象
true
属性y:
一级缓存 : 单例池 singletonObjects底层结构: ConcurrentHashMap作用: 存放已经创建好了的bean
font color=\"#ff8000\
① 开始Y的生命周期
Y注入X
注入x流程开始
font color=\"#003300\
x的生命周期创建key = x
y生命周期创建key = y
bean-y : y@2941
false
关键步骤:3.2.1 beforeSingletonCreation(beanName); font color=\"#ff0000\
3.2.2.2 populateBean开始font color=\"#ff8000\
属性y指向---bean-y:y@2941
spring解决循环依赖的几个重要组件: 1. AbstractAutowireCapableBeanFactory类中 : 1. allowCircularReferences : 表示是否使用spring自己的循环依赖解决流程 2. DefaultSingletonBeanRegistry: span style=\
入口
x属性 指向 --- 半成品-x: x@2974
bean-x/半成品-x : x@2794
font color=\"#ff0000\
3.2.2.2 populateBean开始为font color=\"#ff8000\
x生命周期创建key = x
singletonCurrentlyInCreation===================
三级缓存 : 提前暴露对象的容器 earlySingletonObjects底层结构: HashMap 作用: 存放通过二级缓存中对象工厂创建的对象
3.2.2.1 font color=\"#000000\
在内存中的体现
3.2 第二次调用getSingleton(bspan style=\"font-size: inherit;\
出口
font color=\"#66cc00\
sharedInstance != null && args == null
注入x完成之后
返回 bean-y: y@2941
0 条评论
回复 删除
下一页