Spring中@Autowired、@Qualifier、@Resource注解的區(qū)別
Spring中@Autowired、@Qualifier、@Resource注解的區(qū)別
1、@Autowired
@Autowired 可以單獨(dú)使用。如果單獨(dú)使用,它將按類(lèi)型裝配。
因此,如果在容器中聲明了多個(gè)相同類(lèi)型的bean,則會(huì)出現(xiàn)問(wèn)題,因?yàn)?@Autowired 不知道要使用哪個(gè)bean來(lái)注入。
因此,使用 @Qualifier 與 @Autowired 一起,通過(guò)指定bean名稱(chēng)來(lái)闡明實(shí)際裝配的bean (按姓名連線)。如下:
@Autowired() @Qualifier("baseDao") private BaseDao baseDao;
@Autowired 默認(rèn)按類(lèi)型裝配(這個(gè)注解是屬于spring的),默認(rèn)情況下必須要求依賴(lài)對(duì)象必須存在,如果要允許null 值,可以設(shè)置它的required屬性為false,如:@Autowired(required = false) 。
2、@Qualifier
@Qualifier 默認(rèn)按名稱(chēng)裝配(這個(gè)注解是屬于spring的),value 默認(rèn)@Qualifier(value = "") 空值。
3、@Resource
@Resource(這個(gè)注解屬于J2EE的),默認(rèn)按照名稱(chēng)進(jìn)行裝配,名稱(chēng)可以通過(guò)name屬性進(jìn)行指定, 如果沒(méi)有指定name屬性,當(dāng)注解寫(xiě)在字段上時(shí),默認(rèn)取字段名進(jìn)行按照名稱(chēng)查找,如果注解寫(xiě)在setter方法上默認(rèn)取屬性名進(jìn)行裝配。 當(dāng)找不到與名稱(chēng)匹配的bean時(shí)才按照類(lèi)型進(jìn)行裝配。但是需要注意的是,如果name屬性一旦指定,就只會(huì)按照名稱(chēng)進(jìn)行裝配。
@Resource(name = "baseDao") private BaseDao baseDao;
4、小結(jié)
區(qū)別在于 @Autowired 和 @Qualifier 是彈簧注釋?zhuān)?@Resource 是標(biāo)準(zhǔn)的java注釋?zhuān)▉?lái)自JSR-250)。
此外, @Resource 僅支持字段和setter注入,而 @Autowired 支持字段,setter,構(gòu)造函數(shù)和多參數(shù)方法注入。
建議使用 @Resource 進(jìn)行字段和setter注入。堅(jiān)持使用 @Qualifier 和 @Autowired 進(jìn)行構(gòu)造函數(shù)或多參數(shù)方法注入。
到此這篇關(guān)于Spring中@Autowired、@Qualifier、@Resource注解的區(qū)別的文章就介紹到這了,更多相關(guān)@Autowired、@Qualifier、@Resource注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot使用MockMvc測(cè)試get和post接口的示例代碼
Spring Boot MockMvc是一個(gè)用于單元測(cè)試的模塊,它是Spring框架的一部分,專(zhuān)注于簡(jiǎn)化Web應(yīng)用程序的測(cè)試,MockMvc主要用來(lái)模擬一個(gè)完整的HTTP請(qǐng)求-響應(yīng)生命周期,本文給大家介紹了SpringBoot使用MockMvc測(cè)試get和post接口,需要的朋友可以參考下2024-06-06Mybatis應(yīng)用mysql存儲(chǔ)過(guò)程查詢(xún)數(shù)據(jù)實(shí)例
下面小編就為大家分享一篇Mybatis應(yīng)用mysql存儲(chǔ)過(guò)程查詢(xún)數(shù)據(jù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12解決logback使用${spring.application.name}日志打印路徑的問(wèn)題
這篇文章主要介紹了解決logback使用${spring.application.name}日志打印路徑的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06解決idea中svn提交時(shí)performing vcs refresh時(shí)間很長(zhǎng)的問(wèn)題
這篇文章主要介紹了解決idea中svn提交時(shí)performing vcs refresh時(shí)間很長(zhǎng)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09Java的Hibernate框架中的雙向主鍵關(guān)聯(lián)與雙向外鍵關(guān)聯(lián)
Hibernate想要實(shí)現(xiàn)雙向的關(guān)聯(lián)就必須在映射文件的兩端同時(shí)配置<one-to-one>,另外還要在主映射的一端采用foreign外鍵關(guān)聯(lián)屬性,下面我們就一起來(lái)看一下Java的Hibernate框架中的雙向主鍵關(guān)聯(lián)與雙向外鍵關(guān)聯(lián)方法:2016-06-06springboot的統(tǒng)一異常處理,使用@RestControllerAdvice詳解
@RestControllerAdvice是Spring Boot中的全局異常處理注解,結(jié)合了@ControllerAdvice和@ResponseBody的功能,通過(guò)創(chuàng)建自定義異常類(lèi)和全局異常處理器,可以實(shí)現(xiàn)統(tǒng)一異常處理,確保API的一致性和響應(yīng)的標(biāo)準(zhǔn)化2024-12-12Spring Boot日志收集及鏈路追蹤實(shí)現(xiàn)示例
這篇文章主要為大家介紹了Spring Boot日志收集及鏈路追蹤實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12springMVC前臺(tái)傳數(shù)組類(lèi)型,后臺(tái)用list類(lèi)型接收實(shí)例代碼
這篇文章主要介紹了springMVC前臺(tái)傳數(shù)組類(lèi)型,后臺(tái)用list類(lèi)型接收實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12