Spring中@Autowired和@Qualifier注解的3個(gè)知識(shí)點(diǎn)小結(jié)
@Autowired和@Qualifier注解的3個(gè)知識(shí)點(diǎn)
1.@Autowired自動(dòng)注入
默認(rèn)是先以byType的方式,如果有多個(gè)類型相匹配,那么使用byName進(jìn)行注入
2.如果想直接使用byName的注入方式
那么需要在@Autowired注解的下面加上注解@Qualifier(“userService”),括號(hào)里面為要注入的bean的name,如圖

3.如果沒(méi)有指定Spring創(chuàng)建的bean的名稱
(1) 默認(rèn)名為類名,但首字母小寫(xiě),如:UserService類,創(chuàng)建的bean的name為userService
(2) 如果類名前兩個(gè)或以上字母都為大寫(xiě),那么bean的名字就是類名,如:TUserService類,默認(rèn)創(chuàng)建的bean的name為T(mén)UserService
@Autowired @Qualifier @Resource的區(qū)別
@Autowired
- spring的注解,默認(rèn)按type注入
@Qualifier
- spring的注解,按名字注入 一般當(dāng)出現(xiàn)兩個(gè)及以上bean時(shí),不知道要注入哪個(gè),作為@Autowired()的修飾用
@Resource
- @Resource(這個(gè)注解屬于J2EE的),默認(rèn)按name注入,可以通過(guò)name和type屬性進(jìn)行選擇性注入
看下栗子
1.@Autowired
寫(xiě)一個(gè)User類 實(shí)例化一個(gè)User的Bean 在controller中使用@Autowired注入 運(yùn)行程序
訪問(wèn)接口




要注意的是@Autowired默認(rèn)情況下required=true當(dāng)注入對(duì)象未實(shí)例化被使用 會(huì)空指針 如果要允許null 值,可以設(shè)置它的required屬性為false,@Autowired(required=false)
2.@Qualifier
在實(shí)例化Bean的時(shí)候 實(shí)例化兩個(gè) 如圖

這時(shí)候會(huì)發(fā)現(xiàn)注入的地方報(bào)錯(cuò) 不清楚要注入哪個(gè)bean 錯(cuò)誤如下圖

這時(shí)候我們就可以使用@Qualifier來(lái)配合@Autowire進(jìn)行注入了
首先在實(shí)例化bean的時(shí)候指定名字 注入時(shí)使用對(duì)應(yīng)的名字注入 如下圖


重新啟動(dòng)后正常訪問(wèn)
3.@Resource
默認(rèn)安照名稱進(jìn)行裝配,名稱可以通過(guò)name屬性進(jìn)行指定, 如果沒(méi)有指定name屬性,當(dāng)注解寫(xiě)在字段上時(shí),默認(rèn)取字段名進(jìn)行按照名稱查找,如果注解寫(xiě)在setter方法上默認(rèn)取屬性名進(jìn)行裝配。
當(dāng)找不到與名稱匹配的bean時(shí)才按照類型進(jìn)行裝配。但是需要注意的是,如果name屬性一旦指定,就只會(huì)按照名稱進(jìn)行裝配。
通過(guò)name屬性指定注入 啟動(dòng)項(xiàng)目后可正常訪問(wèn)

不指定name 初始化一個(gè)bean,name=user2,


他首先按照類名小寫(xiě)user作為name去注入Bean,發(fā)現(xiàn)并沒(méi)有這個(gè)名字的實(shí)例,然后會(huì)根據(jù)類型自動(dòng)匹配 所以運(yùn)行程序不會(huì)出錯(cuò) 可以正常訪問(wèn)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)輸出數(shù)字三角形實(shí)例代碼
大家好,本篇文章主要講的是Java實(shí)現(xiàn)輸出三角形實(shí)例代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2022-01-01
Java 解決讀寫(xiě)本地文件中文亂碼的問(wèn)題
這篇文章主要介紹了Java 解決讀寫(xiě)本地文件中文亂碼的問(wèn)題的相關(guān)資料,需要的朋友可以參考下2017-01-01
MybatisPlus?自定義插件實(shí)現(xiàn)攔截SQL修改功能(實(shí)例詳解)
這篇文章主要介紹了MybatisPlus?自定義插件實(shí)現(xiàn)攔截SQL修改功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11
Java利用Jackson序列化實(shí)現(xiàn)數(shù)據(jù)脫敏
這篇文章主要介紹了利用Jackson序列化實(shí)現(xiàn)數(shù)據(jù)脫敏,首先在需要進(jìn)行脫敏的VO字段上面標(biāo)注相關(guān)脫敏注解,具體實(shí)例代碼文中給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-10-10
Java util.List如何實(shí)現(xiàn)列表分段處理
這篇文章主要介紹了Java util.List如何實(shí)現(xiàn)列表分段處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
詳解SpringMVC注解@initbinder解決類型轉(zhuǎn)換問(wèn)題
本篇文章主要介紹了詳解SpringMVC注解@initbinder解決類型轉(zhuǎn)換問(wèn)題,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03

