ole7中文网站
  咨询电话:15519310810

haoli777.net

Spring 中的循环依赖

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

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

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

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


<bean id="a" /> <bean id="b" ><property name="aref" ref="a" /></bean><bean id="sysinit" > <bean id="manager" depends-on="sysinit"/>

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

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