春季循环参考

时间:2017-04-28 03:34:09

标签: java spring circular-reference

据我所知,Spring通过公开当前正在创建的每个bean的ObjectFactory来解决循环引用问题。

我感到困惑的问题是:为什么不首先实例化每个bean,然后使用Field.set(obj,val)填充autowire字段,为什么还要使用缓存和对象工厂使它变得如此复杂。

1 个答案:

答案 0 :(得分:0)

Dependency resolution process

  

循环依赖

     

如果您主要使用构造函数注入,则可以   创建一个无法解析的循环依赖场景。

     

例如:A类需要B类的实例   构造函数注入,而类B需要类A的实例   通过构造函数注入。如果为类A配置bean   和I B相互注入,Spring IoC容器检测到   这个循环引用在运行时,并抛出一个   BeanCurrentlyInCreationException。

     

一种可能的解决方案是编辑某些类的源代码   由setter而不是构造函数配置。或者,避免   构造函数注入和仅使用setter注入。换一种说法,   虽然不推荐,但您可以配置循环   与setter注入的依赖关系。

     

与典型案例(没有循环依赖关系)不同,是一个循环   bean A和bean B之间的依赖关系强制其中一个bean   在完全初始化之前注入另一个(a   经典的鸡肉/鸡蛋情景)。