Spring 中的循环依赖

A 实例依赖 B 实例,B 实例依赖 C 实例,C 实例依赖 A 实例,依赖关系形成一个环,就称为循环依赖。

protoType 作用域的循环依赖:循环依赖是对于单例来说的,spring 容器对于 protoType 作用域的 bean 不进行缓存,因此无法完成依赖注入。

构造器循环依赖(单例):始终都在等待依赖创建成功,陷于死循环,无法解决。

setter 循环依赖(单例):在 bean 实例创建成功还未进行注入时,创建一个可以得到这个 bean 的 ObjectFatory,并将这个 ObjectFatory 加入缓存。解决循环依赖如下图:

FmRlkE0IgS4kxCPhDYvMPtzzlC1O.png


<bean id="a" class="ClassA"/>
    <bean id="b" class="ClassB">
<property name="aref" ref="a" />
</bean>

<bean id="sysinit" class="SystemInit">  
<bean id="manager" class="CacheManager" depends-on="sysinit"/>  

XML 中的 ref 关系指的就是上文提到的依赖关系,依赖的 bean 是当前 bean 的属性。

但有时候依赖关系并不会这么明显,但又确实存在,这时可以使用 depend-on。depend-on 依赖不允许形成闭环。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值