Spring中@Autowired和@Qualifier注解的3個知識點小結(jié)
@Autowired和@Qualifier注解的3個知識點
1.@Autowired自動注入
默認是先以byType的方式,如果有多個類型相匹配,那么使用byName進行注入
2.如果想直接使用byName的注入方式
那么需要在@Autowired注解的下面加上注解@Qualifier(“userService”),括號里面為要注入的bean的name,如圖
3.如果沒有指定Spring創(chuàng)建的bean的名稱
(1) 默認名為類名,但首字母小寫,如:UserService類,創(chuàng)建的bean的name為userService
(2) 如果類名前兩個或以上字母都為大寫,那么bean的名字就是類名,如:TUserService類,默認創(chuàng)建的bean的name為TUserService
@Autowired @Qualifier @Resource的區(qū)別
@Autowired
- spring的注解,默認按type注入
@Qualifier
- spring的注解,按名字注入 一般當出現(xiàn)兩個及以上bean時,不知道要注入哪個,作為@Autowired()的修飾用
@Resource
- @Resource(這個注解屬于J2EE的),默認按name注入,可以通過name和type屬性進行選擇性注入
看下栗子
1.@Autowired
寫一個User類 實例化一個User的Bean 在controller中使用@Autowired注入 運行程序
訪問接口
要注意的是@Autowired默認情況下required=true當注入對象未實例化被使用 會空指針 如果要允許null 值,可以設置它的required屬性為false,@Autowired(required=false)
2.@Qualifier
在實例化Bean的時候 實例化兩個 如圖
這時候會發(fā)現(xiàn)注入的地方報錯 不清楚要注入哪個bean 錯誤如下圖
這時候我們就可以使用@Qualifier來配合@Autowire進行注入了
首先在實例化bean的時候指定名字 注入時使用對應的名字注入 如下圖
重新啟動后正常訪問
3.@Resource
默認安照名稱進行裝配,名稱可以通過name屬性進行指定, 如果沒有指定name屬性,當注解寫在字段上時,默認取字段名進行按照名稱查找,如果注解寫在setter方法上默認取屬性名進行裝配。
當找不到與名稱匹配的bean時才按照類型進行裝配。但是需要注意的是,如果name屬性一旦指定,就只會按照名稱進行裝配。
通過name屬性指定注入 啟動項目后可正常訪問
不指定name 初始化一個bean,name=user2,
他首先按照類名小寫user作為name去注入Bean,發(fā)現(xiàn)并沒有這個名字的實例,然后會根據(jù)類型自動匹配 所以運行程序不會出錯 可以正常訪問
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MybatisPlus?自定義插件實現(xiàn)攔截SQL修改功能(實例詳解)
這篇文章主要介紹了MybatisPlus?自定義插件實現(xiàn)攔截SQL修改功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-11-11Java利用Jackson序列化實現(xiàn)數(shù)據(jù)脫敏
這篇文章主要介紹了利用Jackson序列化實現(xiàn)數(shù)據(jù)脫敏,首先在需要進行脫敏的VO字段上面標注相關(guān)脫敏注解,具體實例代碼文中給大家介紹的非常詳細,需要的朋友可以參考下2021-10-10Java util.List如何實現(xiàn)列表分段處理
這篇文章主要介紹了Java util.List如何實現(xiàn)列表分段處理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09詳解SpringMVC注解@initbinder解決類型轉(zhuǎn)換問題
本篇文章主要介紹了詳解SpringMVC注解@initbinder解決類型轉(zhuǎn)換問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03