Spring中 @Autowired標(biāo)簽與 @Resource標(biāo)簽 的區(qū)別

參考鏈接

Spring中 @Autowired標(biāo)簽與 @Resource標(biāo)簽 的區(qū)別

Spring不但支持自己定義的@Autowired注解,還支持由JSR-250規(guī)范定義的幾個(gè)注解,如:@Resource、?@PostConstruct及@PreDestroy。

1. @Autowired

@Autowired是Spring 提供的,需導(dǎo)入

Package:org.springframework.beans.factory.annotation.Autowired;

只按照byType 注入。

2. @Resource

@Resource默認(rèn)按 byName 自動注入,是J2EE提供的, 需導(dǎo)入Package:

javax.annotation.Resource;

@Resource有兩個(gè)中重要的屬性:name和type ,而Spring將@Resource注解的name屬性解析為bean的

名字,而type屬性則解析為bean的類型。所以如果使用name屬性,則使用byName的自動注入策略,而使用

type屬性時(shí)則使用 byType自動注入策略。如果既不指定name也不指定type屬性,這時(shí)將通過反射機(jī)制使用byName自動注入策略。

@Resource裝配順序

(1). 如果同時(shí)指定了name和type,則從Spring上下文中找到唯一匹配的bean進(jìn)行裝配,找不到則拋出異常;

(2). 如果指定了name,則從上下文中查找名稱(id)匹配的bean進(jìn)行裝配,找不到則拋出異常;

(3). 如果指定了type,則從上下文中找到類型匹配的唯一bean進(jìn)行裝配,找不到或者找到多個(gè),都會拋出異常;

(4). 如果既沒有指定name,又沒有指定type,則自動按照byName方式進(jìn)行裝配;如果沒有匹配,則回退為一

個(gè)原始類型進(jìn)行匹配,如果匹配則自動裝配;

@Resource的作用相當(dāng)于@Autowired,只不過@Autowired按byType自動注入。

3. 使用區(qū)別

@Resource(name="loginService")

private LoginService loginService;

@Autowired(required=false)@Qualifier("loginService")

private LoginService loginService;

(1).@Autowired 與@Resource都可以用來裝配bean. 都可以寫在字段上,或?qū)懺趕etter方法上;

(2).@Autowired 默認(rèn)按類型裝配,默認(rèn)情況下必須要求依賴對象必須存在,如果要允許null值,可以設(shè)置它的required屬性為false,

????????如:@Autowired(required=false) .

如果我們想使用名稱裝配可以結(jié)合?@Qualifier注解進(jìn)行使用;

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

推薦使用@Resource注解在字段上,這樣就不用寫setter方法了.并且這個(gè)注解是屬于J2EE的,減少了與Spring的耦合,這樣代碼看起就比較優(yōu)雅 。

另外,通過實(shí)踐,還總結(jié)出一條規(guī)律:

如果將@requied或者@autowired寫了set方法之上,則程序會走到set方法內(nèi)部。

但如果寫在了field之上,則不會進(jìn)入set方法當(dāng)中

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

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 1.1 spring IoC容器和beans的簡介 Spring 框架的最核心基礎(chǔ)的功能是IoC(控制反轉(zhuǎn))容器,...
    simoscode閱讀 6,846評論 2 22
  • 1.1 Spring IoC容器和bean簡介 本章介紹了Spring Framework實(shí)現(xiàn)的控制反轉(zhuǎn)(IoC)...
    起名真是難閱讀 2,665評論 0 8
  • 內(nèi)容過長,core部分分開發(fā)布,core章節(jié)第二部分點(diǎn)擊:Spring Framework 官方文檔中文版—Cor...
    kopshome閱讀 34,343評論 7 24
  • 本來是準(zhǔn)備看一看Spring源碼的。然后在知乎上看到來一個(gè)帖子,說有一群**自己連Spring官方文檔都沒有完全讀...
    此魚不得水閱讀 7,037評論 4 21

友情鏈接更多精彩內(nèi)容