具有營(yíng)銷(xiāo)價(jià)值好的網(wǎng)站武漢seo優(yōu)化代理
byType找到多種實(shí)現(xiàn)類(lèi)導(dǎo)致報(bào)錯(cuò)
@Autowired
: 通過(guò)byType
方式進(jìn)行裝配, 找不到或是找到多個(gè),都會(huì)拋出異常
我們?cè)趩卧獪y(cè)試中無(wú)法進(jìn)行字段注入
字段注入通常是 private
修飾的,Spring 容器通過(guò)反射為這些字段注入依賴(lài)。然而,在單元測(cè)試中,我們不能直接訪問(wèn)或賦值這些私有字段
所以為了在單元測(cè)試用也能注入我們的Bean對(duì)象,我們最好用構(gòu)造注入
無(wú)法定義 final
字段
- 字段注入的問(wèn)題: 使用字段注入時(shí),字段必須是非
final
的,這違反了不可變性設(shè)計(jì)的最佳實(shí)踐。 - 構(gòu)造函數(shù)注入的優(yōu)勢(shì): 構(gòu)造函數(shù)注入允許將依賴(lài)聲明為
final
,確保依賴(lài)在對(duì)象構(gòu)造后不可更改。
@Component
public class MyService {private final MyRepository myRepository;public MyService(MyRepository myRepository) {this.myRepository = myRepository;}
}
Spring 的初始化順序可能導(dǎo)致問(wèn)題
- 字段注入的問(wèn)題: 字段注入依賴(lài)于 Spring 的反射機(jī)制在對(duì)象實(shí)例化后注入依賴(lài)。這可能導(dǎo)致在依賴(lài)注入完成之前嘗試訪問(wèn)字段,從而引發(fā)
NullPointerException
。 - 構(gòu)造函數(shù)注入的優(yōu)勢(shì): 構(gòu)造函數(shù)注入在對(duì)象創(chuàng)建時(shí)就完成了所有依賴(lài)的初始化,避免了初始化順序問(wèn)題。