@Resource、@Autowired、@Qualifier的注解注入及區(qū)別

在Java代碼中可以使用 @Resource 或者 @Autowired 注解方式來進行注入。 雖然 @Resource 和 @Autowried 都可以完成依賴注入,但是他們是有區(qū)別的。
一: @Resource

默認是按照名稱來裝配注入的,只有當找不到與名稱匹配的bean才會按照類型來注入。

它有兩個屬性是比較重要的:

①. name: Spring 將 name 的屬性值解析為 bean 的名稱, 使用 byName 的自動注入策略

②. type: Spring 將 type的屬性值解析為 bean 的類型,使用 byType 的自動注入策略

注: 如果既不指定 name 屬性又不指定 type 屬性,Spring這時通過反射機制使用 byName 自動注入策略

@Resource 的裝配順序

1. 如果同時指定了 name 屬性和 type 屬性,那么 Spring 將從容器中找唯一匹配的 bean 進行裝配,找不到則拋出異常

2. 如果指定了 name 屬性值,則從容器中查找名稱匹配的 bean 進行裝配,找不到則拋出異常

3. 如果指定了 type 屬性值,則從容器中查找類型匹配的唯一的 bean 進行裝配,找不到或者找到多個都會拋出異常

4. 如果都不指定,則會自動按照 byName 方式進行裝配, 如果沒有匹配,則回退一個原始類型進行匹配,如果匹配則自動裝配

二: @Autowried

默認是按照類型進行裝配注入,默認情況下,它要求依賴對象必須存在,如果允許 null 值,可以設置它 required 為false。

如果我們想要按名稱進行裝配的話,可以添加一個 @Qualifier 注解解決。

@Autowried
@Qualifier("adminDAO")
private AdminDAO adminDAO;

@Resource 注解是 J2EE 提供的, 而 @Autowried 是 Spring 提供的,如果想減少對 Spring 的依賴建議使用 @Resource 方法。

@Resource 和 @Autowried 都可以加在字段的 setter 方法上。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容