Java では、2 つのクラスまたは 2 つのモジュールが相互に依存し、循環を形成するときに循環依存関係が発生します。
以下の例に示すように、相互に依存する 2 つの Bean A と B があるとします。
@Component public class A{ private final B b; public A(B b){ this.b = b; } }
@Component public class B{ private final A a; public B(A a){ this.a = a; } }
プロジェクトを実行すると、次のエラーが表示されます:
Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.
したがって、この循環依存関係を解決するには、4 つの解決策があります:
私たちのケースでは、以下の例に示すように、注釈 @lazy を使用するだけの 4 番目の解決策を使用します。
@Component public class A{ private final B b; public A(@Lazy B b){ this.b = b; } }
@Component public class B{ private final A a; public B(A a){ this.a = a; } }
そして、私たちはこのサイクルから抜け出しました:)
以上がSpring Boot の循環依存関係の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。