Spring 中的循环依赖

本文深入探讨了循环依赖的概念,包括在Spring框架中protoType和singleton作用域下的表现形式,以及如何通过setter注入解决循环依赖问题。

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

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 依赖不允许形成闭环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值