spring避免循环依赖: 参见数《Spring源码深度解析》,第98页
1.如果通过构造器注入构成的循环依赖,这种情况下是没有办法解决的。例如如下配置:
<constructor-arg index="0" ref="B">
<constructor-arg index="0" ref="C">
<constructor-arg index="0" ref="A">
2.通过setter注入方式构成的循环依赖,只能解决单例作用域的bean循环依赖。通过提前暴露一个单例工厂方法,从而使其他bean能引用到改bean。
例如,当A中含有B的属性,B中又含有A的属性,这个时候会构成循环依赖,此时如果A和B都是单例,那么spring的处理方式就是当创建B的时候后,涉及自动注入A的步骤时,并不是直接去再次创建A,而是通过放入缓存中的ObjectFactory来创建实例,这样解决了循环依赖的问题。