【轉】Autowired和resource註解的區別(來源於公司同事分享)

我以前一直都用的setter方法
在im纔開始用註解
然後也只是知其然不知其所以然
今天看到一個類裏面同時在用autowire和resource註解
就查了下兩者的區別
發現差距很大,而且有可能會引起大的問題
和大家分享一下
 

1、@Autowired與@Resource都可以用來裝配bean. 都可以寫在字段上,或寫在setter方法上。 
2、@Autowired默認按類型裝配(這個註解是屬於spring的),默認情況下必須要求依賴對象必須存在,如果要允許null 值,可以設置它的required屬性爲false,如:@Autowired(required=false) ,如果我們想使用名稱裝配可以結合@Qualifier註解進行使用,如下: 

  1. @Autowired() @Qualifier("baseDao")     
  2. private BaseDao baseDao;    

 3、@Resource(這個註解屬於J2EE的),默認安照名稱進行裝配,名稱可以通過name屬性進行指定, 
如果沒有指定name屬性,當註解寫在字段上時,默認取字段名進行按照名稱查找,如果註解寫在setter方法上默認取屬性名進行裝配。 當找不到與名稱匹配的bean時才按照類型進行裝配。但是需要注意的是,如果name屬性一旦指定,就只會按照名稱進行裝配。

Java代碼  
  1. @Resource(name="baseDao")     
  2. private BaseDao baseDao;    
 
autowire默認是用type來進行匹配的,而我們很多時候都是需要按照name的,例如cache現在的commonCacheService,有時候需要有多個實例,不過autowired可以通過qualifier註解一起來實現按照名稱匹配
而且我們以前也發生過因爲有多個同樣type的實例導致autowire失敗提示說有多個相同類型的實例無法匹配,然後程序不能啓動的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章