Spring循环依赖问题的产生与解决

1、Spring循环依赖产生的原因

循环依赖:一个或多个对象实例之间存在直接或间接的依赖关系,这种依赖关系构成了构成一个环形调用。

简单点来说,就是a的实例化需要b的依赖注入,b的实例化也需要a。这样 就会导致a需要b,b需要a的这么一种尴尬场面,可以联想一下并发中的死锁。

2、spring能够解决的循环依赖的情况

单例模式的Setter注入

解决方式为三级缓存

三级缓存用于保存bean创建工厂,在后续有需要做代理时使用

二级,存储实例对象(未完成依赖注入)

一级,存储完成依赖注入的实例对象

综上,其实解决单例setter注入的循环依赖时,是将创建对象,与依赖注入的两件事情分开做了,当需要创建这个bean时,首先先将其工厂放到三级中,然后去寻找依赖,当这个依赖的创建循环到自己时,可以直接将三级中存储的取出来,虽然它现在只是个空壳,没有内部的依赖注入,但因为是单例,操作来操作去,a还是只有那个a,所以可以解决循环依赖问题。

3、spring解决不了的循环依赖情况

1、多例模式的setter注入(原因是多例处理不了)

2、构造器的注入方式(原因是拆不开)

3、DependOn的依赖方式

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值