@Repository
class A {
public void method1() {
...
}
}
@Component
class B implements C {
@Autowired
@Lazy
private A a;
public void method2() {
a.method1();
}
}
@Component
class D {
@Autowired
private List<C> c;
@PostConstruct
public void method3() {
// iterate on list c and call method2()
}
}
はのは、春には、次のように豆を初期化するとしましょう:
1.最初のBean Bが作成されます。 Bean Bを作成しているときは、フィールドa
は@Lazy
アノテーションのために初期化されません。
2.次のBean Dが作成されます。それでmethod3()
は@PostConstruct
とマークされて実行されますが、Bean AはまだSpringによって触れられていません。したがって、a.method1()が呼び出されると、SpringはBean Aを作成してフィールドa
に注入するか、NullPointerException
を投げますか?
同じ設定を実行しようとしましたか? – Arpit
@Arpitはい私はそれをして、AをAに注入しました。しかし、SpringがAかDに最初に来るかどうかを保証することはできません.Aが最初に来たら、method3()を実行している間にAを注入することができます。最初にDに来ると、問題が発生する可能性があります。 – rohanagarwal