我有以下類別:使用Spring @Lazy和@PostConstruct註解
@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正在創建時,由於@Lazy
註釋,字段a
將不會被初始化。
2.下一個bean D被創建。然後method3()
將被執行,因爲它被標記爲@PostConstruct
,但bean A尚未被Spring觸及。所以當a.method1()被調用時,Spring會創建bean A並將其注入到字段a
中,否則它會拋出一個NullPointerException
?
您是否嘗試過運行相同的設置? – Arpit
@Arpit是的,我做了,它確實注入到一個。但是我不能保證Spring是先來到A還是去D.如果先來到A,它將能夠在執行method3()的同時注入A.如果它首先出現在D,那麼問題可能會出現。 – rohanagarwal