Spring的@Autowired注入規則

@Autowired 默認是按照byType進行注入的,但是當byType方式找到了多個符合的bean,又是怎麼處理的?


經過一些代碼的測試,我發現,Autowired默認先按byType,如果發現找到多個bean,則,又按照byName方式比對,如果還有多個,則報出異常。

例子:

@Autowired
private ExamUserMapper examUserMapper;  - ExamUserMapper是一個接口


1. spring先找類型爲ExamUserMapper的bean

2. 如果存在且唯一,則OK;

3. 如果不唯一,在結果集裏,尋找name爲examUserMapper的bean。因爲bean的name有唯一性,所以,到這裏應該能確定是否存在滿足要求的bean了


@Autowired也可以手動指定按照byName方式注入,使用@Qualifier標籤,例如:
@Autowired () @Qualifier ( "baseDao" )

因爲bean的name具有唯一性,理論上是byName會快一點,但spring默認使用byType的方式注入,讓我很迷惑,確定不了哪一個真的快。具體到實際應用,感覺差別不大,就看大家的習慣

另注:@Resource(這個註解屬於J2EE的)的標籤,默認是按照byName方式注入的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章