關于@Autowierd && @Resource 你真的了解嗎
關于@Autowierd && @Resource 你真的了解嗎
1.@Autowierd
使用byType注入,默認情況下要求依賴必須存在;配置required=false表示依賴可為null

下面代碼第一個注入是會報錯的,編輯器是會有紅色提示。
因為代碼中沒有這樣的bean,截圖也能看的出來。
@Autowired
private Data data; //報錯
@Autowired(required = false) //沒事
private Data data2;

2.@Resource
按照ByName自動注入,@Resource有兩個重要的屬性:name和type,而Spring將@Resource注解的 name屬性解析為bean的名字,而type屬性則解析為bean的類型。
所以,如果使用name屬性,則使用byName的自動注入策略,而使用type屬性時則使用byType自動注入策略。
如果既不制定name也不制定type屬性,這時將通過反射機制使用byName自動注入策略。
2.1@Resource具體裝配順序,即指定的注入實例的策略
①如果同時指定了name和type,則從Spring上下文中找到唯一匹配的bean進行裝配,找不到則拋出異常。
②如果指定了name,則從上下文中查找名稱(id)匹配的bean進行裝配,找不到則拋出異常。
③如果指定了type,則從上下文中找到類似匹配的唯一bean進行裝配,找不到或是找到多個,都會拋出異常。
④如果既沒有指定name,又沒有指定type,則自動按照byName方式進行裝配;如果沒有匹配,則回退為一個原始類型進行匹配,如果匹配則自動裝配(即按照byType的方式)
3.注意
如果是接口或者抽象類的話那么需要實現(xiàn)類唯一,否則創(chuàng)建實例出錯,或者說當接口或抽象類有n多個實現(xiàn)類(繼承類)時,在注入的必須指定此時要注入的實現(xiàn)類(繼承類)。
找到兩個實現(xiàn)類,報錯?。?!

3.1 @Autowierd解決
@Autowierd需要借助@Qualifier來幫助區(qū)分使用具體的哪個實現(xiàn)類
@Autowired
@Qualifier("userServiceImpl")
private UserService userService;
3.2 @Resource解決
@Resource 可以使用name屬性或者是type屬性來指定想要注入的實現(xiàn)類。

@Resource(name = "userServiceImpl2")
private UserService userService1;
@Resource(type = UserServiceImpl.class)
private UserService userService3;
4.高級用法
@Autowierd 注入抽象類時,當抽象類有多個繼承類,可以使用
@Autowierd List<抽象類> ll;//來獲取所有的子類實現(xiàn)集合

@Autowired
private List<UserService> userServices;
小結:
- @Autowierd & @Resource 功能相當,都可以注入實例
- @Autowierd 通過byType的方式注入
- @Resource 優(yōu)先使用byName的方式注入,然后使用@Autowire的方式注入
這就是為什么mybatis自動生成的Mapper文件,你使用@Resouce Idea不會提示紅色下劃線(其實在dao文件的已經被掃描了,但是ieda在編輯的時候找不到,但是在運行中是能夠找到的)
1.dao層配置

2.mybatis自動生成Mapper文件

3具體情況:一看便知
看著報錯,其實不會有錯,以為在2中已配置包掃描了。

@Autowired
private TCommentInfoMapper tCommentInfoMapper;
@Resource
private TCommentInfoMapper tCommentInfoMapper2;
@Autowire和@Resource注解對比
在我看來@Autowire和@Resource有兩個區(qū)別:
一、@Resource是J2EE提供的,@Autowire是Spring提供的

二、兩個注解使用name區(qū)別注入的寫法不同

三、然后就沒有什么不同了
網上很多人專門介紹@Resource能夠用變量名或set方法里的變量名作為對象name來使用,說的好像@Autowire就不能似的.

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
SpringMVC Mybatis配置多個數(shù)據源并切換代碼詳解
這篇文章主要介紹了SpringMVC Mybatis配置多個數(shù)據源并切換代碼詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-11-11
SpringBoot實現(xiàn)配置文件自動加載和刷新的示例詳解
在使用Spring Boot開發(fā)應用程序時,配置文件是非常重要的組成部分,在不同的環(huán)境中,我們可能需要使用不同的配置文件,當我們更改配置文件時,我們希望應用程序能夠自動加載和刷新配置文件,本文我們將探討Spring Boot如何實現(xiàn)配置文件的自動加載和刷新2023-08-08
Spring Boot集成MinIO進行文件存儲和管理的詳細步驟
這篇文章主要介紹了Spring Boot集成MinIO進行文件存儲和管理的詳細步驟,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧2025-04-04
SpringBoot執(zhí)行定時任務@Scheduled的方法
這篇文章主要介紹了SpringBoot執(zhí)行定時任務@Scheduled的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07

