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

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

2. @Resource
@Resource是Java EE規(guī)范的一部分,但Spring同樣支持該注解。
@Resource的bean的匹配規(guī)則
默認(rèn)根據(jù)name進行注入,如果無法通過名稱匹配到對應(yīng)的 Bean 的話,會根據(jù)type進行匹配,找到與指定類型兼容的 Bean 并進行注入,如果都匹配不到則拋出異常。
使用 name 屬性指定資源的名稱
@Component
public class MyClass {
// 名為 "myBean1" 的 bean 將會被注入
@Resource(name = "myBean1")
private MyBean myBean;
}
使用默認(rèn)名稱匹配資源
@Component
public class MyClass {
// 名為“mybean”的bean將被注入
@Resource
private MyBean myBean;
}
根據(jù)type 屬性來指定要注入的bean類型
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失敗,存在兩個bean
@Resource
private MyService myService;
}@Resource不存在required屬性
到此這篇關(guān)于Spring中@Autowired和@Resource注解的使用區(qū)別詳解的文章就介紹到這了,更多相關(guān)@Autowired和@Resource注解區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot實現(xiàn)多租戶系統(tǒng)架構(gòu)的5種設(shè)計方案介紹
多租戶(Multi-tenancy)是一種軟件架構(gòu)模式,允許單個應(yīng)用實例服務(wù)于多個客戶(租戶),同時保持租戶數(shù)據(jù)的隔離性和安全性,本文分享了SpringBoot環(huán)境下實現(xiàn)多租戶系統(tǒng)的5種架構(gòu)設(shè)計方案,需要的可以參考一下2025-05-05
Java使用IntelliJ IDEA連接MySQL的詳細(xì)教程
這篇文章主要給大家介紹了關(guān)于Java使用IntelliJ IDEA連接MySQL的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04

