@Autowired 與@Resource詳解 + 例子

@Resource注入跟@Autuwired 

相同點:

都是做bean的注入

不同點:

(1)提供方:@Autowired是由org.springframework.beans.factory.annotation.Autowired提供,換句話說就是由Spring提供;@Resource是由javax.annotation.Resource提供,即J2EE提供,需要JDK1.6及以上。

(2)注入方式:@Autowired只按照byType 注入;@Resource默認按byName自動注入,也提供按照byType 注入;

(3)屬性:

         @Autowired按類型裝配依賴對象,默認情況下它要求依賴對象必須存在,如果允許null值,可以設置它required屬性爲false。如果我們想使用按名稱裝配,可以結合@Qualifier註解一起使用。

         @Resource有兩個中重要的屬性:name和type。name屬性指定byName,如果沒有指定name屬性,當註解標註在字段上,即默認取字段的名稱作爲bean名稱尋找依賴對象,當註解標註在屬性的setter方法上,即默認取屬性名作爲bean名稱尋找依賴對象。需要注意的是,@Resource如果沒有指定name屬性,並且按照默認的名稱仍然找不到依賴對象時, @Resource註解會回退到按類型裝配。但一旦指定了name屬性,就只能按名稱裝配了。

更直觀的例子:

//初始化時候 會先根據test名稱查找bean的名稱
//沒有的話再根據接口Itest尋找其實現類
@Resource
ITest test;


//只會根據接口ITest去尋找實現類
//如果有多個實現類 需要配置註解@Qualifier bean的名稱尋找對應的bean 否則會報錯
@Autuwired
ITest test;

按ByType注入的用法擴展:

//多個bean存在時使用 注入
//key爲bean的name
@Resource
Map<String,<注入的bean>> map;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章