@Resource和@Autowire的區別
阿新 • • 發佈:2019-02-01
@Resource
和@Autowired
@Resource
和@Autowired
都可以用來裝配bean,都可以用於欄位或setter方法。@Autowired
預設按型別裝配,預設情況下必須要求依賴物件必須存在,如果要允許null值,可以設定它的required屬性為false。
-@Resource
預設按名稱裝配,當找不到與名稱匹配的bean時才按照型別進行裝配。名稱可以通過name屬性指定,如果沒有指定name屬性,當註解寫在欄位上時,預設取欄位名,當註解寫在setter方法上時,預設取屬性名進行裝配。注意:如果name屬性一旦指定,就只會按照名稱進行裝配。
@Autowire
@Qualifier
配合使用效果和@Resource
一樣:@Autowired(required = false) @Qualifier("example") private Example example; @Resource(name = "example") private Example example;
@Resource
裝配順序
1. 如果同時指定name和type,則從容器中查詢唯一匹配的bean裝配,找不到則丟擲異常
2. 如果指定name屬性,則從容器中查詢名稱匹配的bean裝配,找不到則丟擲異常
3. 如果指定type屬性,則從容器中查詢型別唯一匹配的bean裝配,找不到或者找到多個丟擲異常
4. 如果都不指定,則自動按照byName方式裝配,如果沒有匹配,則回退一個原始型別進行匹配,如果匹配則自動裝配
簡要對比表格
註解對比 | @Resource |
@Autowire |
---|---|---|
註解來源 | JDK | Spring |
裝配方式 | 優先按名稱 | 優先按型別 |
屬性 | name、type | required |