天天看點

Spring的@Autowired注入規則

今天在研究了下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方式注入的