Spring beanの循環依存の問題を解決する方法

Springフレームワークでは、循環依存問題は、コンストラクタインジェクションとセッターメソッドインジェクションという2つの方法を使用して解決できます。

  1. 循環依存のあるクラスでは、@Autowired アノテーションによるプロパティインジェクションを利用せず、コンストラクタインジェクションによって依存クラスを注入します。これにより、オブジェクトの作成時に、依存関係が完全にインジェクションされた状態が維持されます。
public class A {
private B b;
public A(B b) {
this.b = b;
}
// ...
}
public class B {
private A a;
public B(A a) {
this.a = a;
}
// ...
}
  1. setter メソッドの注入: 相互依存するクラスにおいて、setter メソッドを介して依存クラスを注入します。このメソッドには @Autowired アノテーションを付与します。オブジェクトを作成すると、Spring が setter メソッドを自動的に呼び出してプロパティに値を注入します。
public class A {
private B b;
@Autowired
public void setB(B b) {
this.b = b;
}
// ...
}
public class B {
private A a;
@Autowired
public void setA(A a) {
this.a = a;
}
// ...
}

セッターメソッド注入を使用する場合は、セッターメソッドに@Autowiredアノテーションを付与する必要があります。付与しないと注入に失敗します。また、循環参照があるクラスでは、フィールド注入(@Autowiredアノテーションでプロパティを直接注入する方法)を使用しないようにしてください。これにより循環参照の問題を回避できます。

bannerAds