Spring如何解决循环依赖的?

在这里插入图片描述
假设有两个实例A,B循环依赖。
且作用域都是单例,因为Spring只支持单例的循环依赖。
假设扫描到了A,调用getBean方法,由于是单例,调用getSingleton方法,发现三个缓中都没有A,进入CreateBeanInstance的流程。此时创建的是能够创建A的工厂放进了三级缓存里面,然后执行populateBean的流程,也就是填充A的属性。
填充A的属性遇到了B,调用getBean()一样的流程,到了填充B属性的时候,发现依赖A,调用getBean(A),此时三级缓存的第三级别缓存具有A 的工厂,利用三级缓存获得的工厂生成A,放入到二级缓存同时删除三级缓存的功能工厂,返回给B。此时B创建完成,放到一级缓存同时返回给A。至此,循环依赖解析完成。

注意:Spring仅仅支持单例模式的setter注入。
因为在构造包装类是在注入三级缓存之前,脱离了三级缓存的支持,均不支持循环依赖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值