Spring 循环依赖(代理)解决流程
2024-03-01 10:46:52 0 举报
Spring框架通过代理机制解决循环依赖问题。当一个Bean被依赖时,Spring会检查该Bean是否已创建。如果没有,Spring会创建一个代理Bean,该代理Bean包含了对原始Bean的引用。这样,当其他Bean需要依赖这个Bean时,Spring会返回这个代理Bean,而不是等待原始Bean的创建完成。因此,即使存在循环依赖,Spring也能确保每个Bean都能得到正确初始化和注入。
作者其他创作
大纲/内容
B的代理对象添加到一级缓存,并从二级三级缓存中移除
A 添加到三级缓存
初始化以及遍历后置处理器
singleton.getObject()
从earlyProxyReference获取A,发现A不用代理
从一级缓存中获取B,未获取到且不在创建中
createBeanInstance实例化
initializeBean初始化A
B 创建完毕
代理对象放到二级缓存从三级缓存中删除A
singletonObjects:一级缓存,存储单例对象,Bean已经实例化,初始化完成。earlySingletonObjects:二级缓存,存储singletonObject,这个Bean已经实例化,但没有初始化。singletonFactories:三级缓存,存储ObjectFactory。
addSingletonFactory
populateBean属性赋值
从一级缓存中获取A,未获取到且不在创建中
从二级缓存中获取A获取不到
B 添加到三级缓存
此时A和B都在三级缓存中
使用工厂创建A
A的代理对象添加到一级缓存,并从二级三级缓存中移除
Start
有 AnnotaionAwareAspectJAutoProxyCeator 后置处理器
getBean A
从三级缓存获取A
从一级缓存中获取A,但是A在创建中
initializeBean初始化B
End
getBean B
生成B的代理对象
判断有Aspect处理器创建代理对象
0 条评论
回复 删除
下一页