Spring中@Autowired和@Resource注解的使用區(qū)別詳解
1. @Autowired
@Autowired是由Spring提供的注解
@Autowired的bean的匹配規(guī)則
@Autowired默認(rèn)根據(jù)type進(jìn)行注入,找到與指定類(lèi)型兼容的 Bean 并進(jìn)行注入,如果無(wú)法通過(guò)type匹配到對(duì)應(yīng)的 Bean 的話(huà),會(huì)根據(jù)name進(jìn)行匹配,如果都匹配不到則拋出異常。
- @Autowired 默認(rèn)是按照類(lèi)的類(lèi)型去匹配。如果存在一個(gè)相同類(lèi)型的bean,則注入該bean。
- 如果存在多個(gè) bean,但只有一個(gè) bean 擁有 @Primary 注解,則將帶有 @Primary 注解的 bean 注入。@Primary 注解用于指定默認(rèn)首選的 bean。
- 如果存在多個(gè) bean,可以使用@Qualifier注解,配合該注解指定bean的具體名稱(chēng),根據(jù)名稱(chēng)去識(shí)別bean。
- 如果存在多個(gè) bean,可以使用 List 或 Set 數(shù)據(jù)結(jié)構(gòu)來(lái)接收所有匹配的 bean。Spring 將自動(dòng)將所有匹配的 bean 放入這些集合中。
- 如果存在多個(gè) bean,沒(méi)有配合上述的方案,則將拋出 NoUniqueBeanDefinitionException 異常。

@Autowired的required屬性
默認(rèn)情況下,required = true,即依賴(lài)bean必須存在,如果不存在,則會(huì)拋出異常。但是,通過(guò)將required屬性設(shè)置為false,則依賴(lài)bean不存在也不會(huì)報(bào)錯(cuò)。

2. @Resource
@Resource是Java EE規(guī)范的一部分,但Spring同樣支持該注解。
@Resource的bean的匹配規(guī)則
默認(rèn)根據(jù)name進(jìn)行注入,如果無(wú)法通過(guò)名稱(chēng)匹配到對(duì)應(yīng)的 Bean 的話(huà),會(huì)根據(jù)type進(jìn)行匹配,找到與指定類(lèi)型兼容的 Bean 并進(jìn)行注入,如果都匹配不到則拋出異常。
使用 name 屬性指定資源的名稱(chēng)
@Component
public class MyClass {
// 名為 "myBean1" 的 bean 將會(huì)被注入
@Resource(name = "myBean1")
private MyBean myBean;
}
使用默認(rèn)名稱(chēng)匹配資源
@Component
public class MyClass {
// 名為“mybean”的bean將被注入
@Resource
private MyBean myBean;
}
根據(jù)type 屬性來(lái)指定要注入的bean類(lèi)型
public interface MyService {
void fetchData();
}
@Component
public class MyServiceA implements MyService {
public void fetchData() {
System.out.println("from MyServiceA");
}
}
@Component
public class MyServiceB implements MyService {
public void fetchData() {
System.out.println("from MyServiceB");
}
}
@Component
public class DataProcessor {
// 根據(jù)指定type注入myServiceA的bean
@Resource(type = MyServiceA.class)
private MyService myService;
// 與上面效果相同注入myServiceA的bean
@Resource
private MyServiceA myServiceA;
// 與上面效果相同注入myServiceA的bean
@Resource
private MyService myServiceA;
// 與上面效果相同注入myServiceA的bean
@Resource(name = "myServiceA")
private MyService myService;
// 注入bean失敗,存在兩個(gè)bean
@Resource
private MyService myService;
}@Resource不存在required屬性
到此這篇關(guān)于Spring中@Autowired和@Resource注解的使用區(qū)別詳解的文章就介紹到這了,更多相關(guān)@Autowired和@Resource注解區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
手把手教你實(shí)現(xiàn)idea中配置國(guó)內(nèi)源
idea的國(guó)內(nèi)源配置十分重要,能夠提升程序開(kāi)發(fā)的效率而且也是減少bug的一種有效防范,本文就來(lái)介紹一下idea中配置國(guó)內(nèi)源,具有一定的參考價(jià)值,感興趣的可以了解一下2023-07-07
SpringBoot實(shí)現(xiàn)多租戶(hù)系統(tǒng)架構(gòu)的5種設(shè)計(jì)方案介紹
多租戶(hù)(Multi-tenancy)是一種軟件架構(gòu)模式,允許單個(gè)應(yīng)用實(shí)例服務(wù)于多個(gè)客戶(hù)(租戶(hù)),同時(shí)保持租戶(hù)數(shù)據(jù)的隔離性和安全性,本文分享了SpringBoot環(huán)境下實(shí)現(xiàn)多租戶(hù)系統(tǒng)的5種架構(gòu)設(shè)計(jì)方案,需要的可以參考一下2025-05-05
Springboot-yaml配置和自動(dòng)配置原理分析
這篇文章主要介紹了Springboot-yaml配置和自動(dòng)配置原理分析,自動(dòng)配置原理是配置文件配置debug: true可以在控制臺(tái)打印自動(dòng)配置報(bào)告.可以打印所有的啟動(dòng)的自動(dòng)配置和沒(méi)有啟動(dòng)的自動(dòng)配置類(lèi),需要的朋友可以參考下2021-06-06
關(guān)于spring中事務(wù)的傳播機(jī)制
這篇文章主要介紹了關(guān)于spring中事務(wù)的傳播機(jī)制,所謂事務(wù)傳播機(jī)制,也就是在事務(wù)在多個(gè)方法的調(diào)用中是如何傳遞的,是重新創(chuàng)建事務(wù)還是使用父方法的事務(wù),需要的朋友可以參考下2023-05-05
Java Switch對(duì)各類(lèi)型支持實(shí)現(xiàn)原理
這篇文章主要介紹了Java Switch對(duì)各類(lèi)型支持實(shí)現(xiàn)原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
Java使用IntelliJ IDEA連接MySQL的詳細(xì)教程
這篇文章主要給大家介紹了關(guān)于Java使用IntelliJ IDEA連接MySQL的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
idea啟動(dòng)項(xiàng)目提示端口占用的問(wèn)題解決
有時(shí)候當(dāng)我們使用Tomcat啟動(dòng)web項(xiàng)目時(shí),會(huì)提示端口占用,導(dǎo)致啟動(dòng)失敗,本文就來(lái)介紹一下端口占用的解決方法,具有一定的參考價(jià)值,感興趣的可以了解下2023-08-08

