Spring Boot の循環依存関係

Barbara Streisand
リリース: 2024-10-22 20:26:03
オリジナル
642 人が閲覧しました

Dépendances cycliques en spring boot

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 などのアノテーションを使用します。

私たちのケースでは、以下の例に示すように、注釈 @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 サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!