【问题标题】:How to resolve circular dependency between beans in Spring IoC? [duplicate]如何解决 Spring IoC 中 bean 之间的循环依赖? [复制]
【发布时间】:2014-09-23 14:19:22
【问题描述】:

假设我有一个依赖于另一个 bean 的 bean,而另一个 bean 依赖于第一个 bean。

Bean#1 -> Bean#2 -> Bean#1

我该如何解决这个问题?

【问题讨论】:

    标签: java spring


    【解决方案1】:

    这是来自Spring Reference

    您通常可以相信 Spring 会做正确的事情。它检测到 配置问题,例如对不存在的 bean 的引用和 循环依赖,在容器加载时。弹簧设置属性 并尽可能晚地解决依赖关系,当 bean 是 实际创建的。

    所以它实例化两个 bean 并将它们相互注入。

    编辑

    在您的情况下,BeanCurrentlyInCreationException 主要是由于构造函数注入引起的。如果是这种情况,主要使用 setter 注入而不是构造函数注入将解决问题。构造函数注入通常会引发鸡蛋问题!

    【讨论】:

    • 我在使用 Spring 的一个版本时遇到了问题,该版本使用旧依赖项的依赖项。而Spring无法解决它。
    【解决方案2】:

    您可以通过使用 setter 注入来解决问题。但是,通常这是一个坏主意,因为代码将更难维护和测试。我建议您将代码重构为仅具有单向依赖关系,例如

    BeanA -> BeanB
    

    解决这个问题的另一种方法是在第三个bean类中提取公共行为,然后让两个初始类依赖它,例如

    BeanA -> BeanC
    BeanB -> BeanC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-03
      • 2022-01-08
      • 2020-06-16
      • 2012-03-15
      • 2016-09-21
      • 2012-01-14
      相关资源
      最近更新 更多