@autowired詳解

少林寺三毛發表於2018-12-27
最近在使用idea開發時經常看到右側欄有黃色一堆堆的,好惡心,這些代表程式碼不符合規範,可能會出現問題,為了程式碼整潔和程式碼規範,則優化一把,重點記錄下autowired註解優化。
複製程式碼

@autowired含義

  • spring 2.5引入了@autowired註釋,@autowired註釋可以對類成員變數、方法、建構函式進行標註,完成自動裝配功能。@autowired查詢bean首先是先通過byType查,如果發現找到有很多bean,則按照byName方式對比獲取,若有名稱一樣的則可以加上@Qualifier("XXX")配置使用。若非必須裝配則可以設定required=false

用法

類成員變數

@Autowired
private PamaDataAdminProdInfoRecordService pamaDataAdminProdInfoRecordService;
複製程式碼

方法

private Person person;
@Autowired
private void setPerson(Person person){
    this.person = person;
}
複製程式碼

建構函式(推薦)

private final PamaAdminCompanyChannelMapService pamaAdminCompanyChannelMapService;
@Autowired
public PamaAdminCompanyChannelMapController(PamaAdminCompanyChannelMapService pamaAdminCompanyChannelMapService){
    this.pamaAdminCompanyChannelMapService = pamaAdminCompanyChannelMapService;
}
複製程式碼

回到今天問題idea提示:

Field injection is not recommended less... (Ctrl+F1) 
Inspection info: Spring Team recommends: "Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies".
複製程式碼

大致含義

始終在bean中使用基於建構函式的依賴注入。 始終使用斷言來強制依賴
複製程式碼

那也就是說要將成員變數改為建構函式方式,用了好久成員變數突然看到這個開始懷疑人生了,baidu、google下看看原因吧!

看到一個大神分享的文章:idea提示@autowired使用建構函式註釋

最重要的一句是“java變數初始化順序是靜態變數或靜態語句塊->例項變數或初始化語句塊->構造方法->@autowired”
複製程式碼
根據@autowired學習更新了我腦子裡的一個知識點:spring掃描註解如@service,將此註解標註的類加入到ioc容器管理,如果有地方需要用的話需要通過@autowird自動裝配方式,從ioc容器查詢,返回給該屬性
複製程式碼

相關文章