springの循環依存性を許可する方法はどうやって構成しますか?
Springでは、循環依存の問題を解決するために、次の2つの方法があります。
- コンストラクタインジェクションの使用:属性インジェクションではなく、ループ依存関係のあるクラスでコンストラクタインジェクションを使用することで、オブジェクトのインスタンス化時にループ依存関係の問題を回避することができます。
AとBという2つのクラスが互いに依存していると仮定すると。
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;
}
}
配置クラスでは、@Beanアノテーションを使用してインスタンスを作成できます。
@Configuration
public class AppConfig {
@Bean
public A a(B b) {
return new A(b);
}
@Bean
public B b(A a) {
return new B(a);
}
}
- 怠惰
例えば、AクラスとBクラスが互いに依存しているとします。
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;
}
}
配置クラスでは、@Lazyアノテーションを使用してBeanの遅延初期化を行うことができます。
@Configuration
public class AppConfig {
@Bean
@Lazy
public A a(B b) {
return new A(b);
}
@Bean
@Lazy
public B b(A a) {
return new B(a);
}
}
Springの循環依存問題を解決するには、上記の2つの方法を使用することができます。