Spring中@Autowired和@Resource注解相同點和不同點
相同點
- 都可以實現(xiàn)依賴注入,通過注解將需要的Bean自動注入到目標(biāo)類中。
- 都可以用于注入任意類型的Bean,包括類、接口、原始類型、數(shù)組等。
- 都支持通過名稱、類型匹配進(jìn)行注入(
@Autowired
注解默認(rèn)按照類型匹配,而@Resource
注解默認(rèn)按照名稱匹配)
@Autowired private Bean beanA; @Resource private Bean beanB;
在Spring容器中這兩個注解功能基本是等價的,都可以將bean注入到對應(yīng)的字段中。
不同點
雖然功能上看起來基本相同還是存在區(qū)別的下面從幾個不同方面分析
1.來源不同。
@Autowired
是 Spring 框架提供的注解。
@Resource
是 JavaEE(現(xiàn)在的 JakartaEE)規(guī)范中定義的注解。
2.包含的屬性不同
@Autowired
只包含一個參數(shù):required,表示是否開啟自動注入,默認(rèn)是true。
@Resource
包含七個參數(shù),其中最重要的兩個參數(shù)是:name 和 type。
3.匹配方式(裝配順序)不同。
@Autowired
默認(rèn)先按照類型進(jìn)行自動裝配,再是根據(jù)名稱的方式。意思就是先在Spring容器中找以Bean為類型的Bean實例,如果找不到或者找到多個bean,則會進(jìn)一步通過字段名稱來找。當(dāng)有多個同類型的 Bean 存在時,也可以通過@Qualifier
注解指定具體的 Bean。
@Component public class UserService { @Autowired @Qualifier("userRepository")//如果有多個同類型的Bean,可以使用@Qualifier注解指定具體的Bean private UserRepository userRepository; // ... }
@Resource
和@Autowired
恰好相反,先是按照名稱方式,然后再是按照類型方式;當(dāng)然,我們也可以通過注解中的參數(shù)顯示指定通過哪種方式。如果有多個同名的Bean,可以使用@Resource注解的name屬性指定具體的Bean
默認(rèn)使用
@Component public class UserService { @Resource//不指定任何屬性 private UserRepository userRepository; // ... }
指定name
@Component public class UserService { @Resource(name = "userRepository")//使用name屬性指定具體的Bean private UserRepository userRepository; // ... }
指定type
@Component public class UserService { @Resource(type = UserRepository.class)//使用type屬性指定Bean類型 private UserRepository userRepository; // ... }
指定name和type
@Component public class UserService { @Resource(type = "UserRepository.class",name = "userRepository")//使用type屬性指定Bean類型,name指定Bean名稱 private UserRepository userRepository; // ... }
4.支持的注入對象類型不同
@Autowired
可以注入任何類型的對象,只要 Spring 容器中存在該類型的 Bean。
@Resource
注解可以用于注入 JNDI 名稱(JNDI名稱可以是任何字符串,但通常使用具有描述性的名稱來標(biāo)識資源。在應(yīng)用程序中,可以使用JNDI名稱來查找和綁定對象)或者默認(rèn)按照名稱匹配的 Bean
5.應(yīng)用地方不同
@Autowired
能夠用在:構(gòu)造器、方法、參數(shù)、成員變量和注解上
@Resource
能用在:類、成員變量和方法上。
到此這篇關(guān)于Spring中@Autowired和@Resource注解異同點的文章就介紹到這了,更多相關(guān)Spring @Autowired和@Resource注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
WebSocket實現(xiàn)系統(tǒng)后臺消息實時通知功能
在現(xiàn)代Web應(yīng)用中,提供實時通知對于改善用戶體驗至關(guān)重要,WebSocket技術(shù)允許建立雙向通信通道,從系統(tǒng)后臺將消息實時傳送給系統(tǒng)用戶,下面我們就來深入探討一下如何使用WebSocket來實現(xiàn)這一功能吧2023-10-10SpringCloud服務(wù)的發(fā)現(xiàn)與調(diào)用詳解
在Java微服務(wù)越來越火的今天。幾乎什么公司都在搞微服務(wù)。而使用的比較多的就是Spring?Cloud技術(shù)棧。今天就來研究一下Spring?Cloud中服務(wù)發(fā)現(xiàn)與調(diào)用的基本原理2022-07-07SpringBoot統(tǒng)一返回處理出現(xiàn)cannot?be?cast?to?java.lang.String異常解決
這篇文章主要給大家介紹了關(guān)于SpringBoot統(tǒng)一返回處理出現(xiàn)cannot?be?cast?to?java.lang.String異常解決的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09javabean servlet jsp實現(xiàn)分頁功能代碼解析
這篇文章主要為大家詳細(xì)解析了javabean servlet jsp實現(xiàn)分頁功能代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09java?Springboot對接開發(fā)微信支付詳細(xì)流程
最近要做一個微信小程序,需要微信支付,所以研究了下怎么在java上集成微信支付功能,下面這篇文章主要給大家介紹了關(guān)于java?Springboot對接開發(fā)微信支付的相關(guān)資料,需要的朋友可以參考下2024-08-08