Spring如何解决循环依赖?

文章详细阐述了Spring如何通过三级缓存解决循环依赖问题。在实例化和属性注入过程中,涉及到了singletonObjects一级缓存、earlySingletonObjects二级缓存和singletonFactories三级缓存的使用。当遇到A->B,B->A的依赖关系时,Spring会按照特定顺序从三级缓存到一级缓存查找对象,完成注入并移除临时缓存,最终确保正确填充所有属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前提:不能解决 1、构造器注入 2、多例

解决:set注入、@Autowire注入

Spring通过三级缓存解决循环依赖:A - > B ,B -> A

singletonObjects 一级缓存(单例池)

earlySingletonObjects 二级缓存

singletonFactories 三级缓存

1、实例化 A 对象之后,将 A 放入三级缓存。

2、对A对象进行属性填充时,需要注入B 对象,之后实例化对象B,B对象也将自己放入三级缓存

3、B 对象属性填充时查询A对象步骤:

从三级缓存中查找——>从二级缓存中查找——>从一级缓存中查找

从三级缓存中查找A对象,找到以后注入A对象,然后将A对象从三级缓存中删除,

执行相关扩展操作将A对象放入二级缓存。

4、B对象实例化、属性填充以后,A对象再进行进行属性填充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值