【问题标题】:Spring Circular Reference弹簧循环参考
【发布时间】:2017-04-28 03:34:09
【问题描述】:

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

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

【问题讨论】:

  • 因为不是每个人都使用字段注入...
  • 换句话说;有些正在使用构造函数注入。或者二传手有副作用,空检查等..

标签: java spring circular-reference


【解决方案1】:

Dependency resolution process

循环依赖

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-10-23
    • 2013-09-20
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多