SpringBoot注解篇之@Resource與@Autowired的使用區(qū)別
一、@Resource與@Autowired的區(qū)別
@Resource 注解和 @Autowired 注解都是在 Spring Framework 中進行依賴注入的注解,但它們之間有一些區(qū)別:
1. 來源不同:
@Resource 注解是由 Java EE 提供的注解,它定義在 javax.annotation.Resource 包下。
@Autowired 注解是由 Spring 提供的注解,它定義在 org.springframework.beans.factory.annotation.Autowired 包下。
2. 依賴注入策略不同:
@Resource 注解默認按照名稱進行依賴注入,如果有多個具有相同類型的依賴,可以使用 name 屬性指定依賴的名稱。
@Autowired 注解默認按照類型進行依賴注入,如果有多個具有相同類型的依賴,可以使用 @Qualifier 注解或者 @Primary 注解指定依賴的名稱或主要依賴。
3. 兼容性不同:
@Resource 注解屬于 Java EE 標準的注解,在 Java EE 環(huán)境中可以正常使用。
@Autowired 注解是 Spring Framework 提供的特定于 Spring 的注解,它可以在 Spring 環(huán)境下使用。
4. 注解屬性不同:
@Resource 注解可以添加 name 屬性來指定依賴的名稱,還可以添加 mappedName 屬性來指定依賴的 JNDI 名稱。
@Autowired 注解可以添加 required 屬性來指定依賴是否必須,默認為 true。
綜上所述,@Resource 注解和 @Autowired 注解在功能上有一些相似之處,但也有一些區(qū)別。如果你在 Java EE 環(huán)境中使用依賴注入,可以選擇使用 @Resource 注解;如果在 Spring Framework 環(huán)境中使用依賴注入,可以選擇使用 @Autowired 注解。需要根據(jù)具體的情況選擇適合的注解進行依賴注入。
二、@Resource詳解
@Resource 是 Java EE 的注解之一,它用于進行依賴注入。@Resource 注解可以應(yīng)用于字段、方法、參數(shù)或者類上。
在 Spring Framework 中,@Resource 注解是由 Spring 提供的用于進行依賴注入的注解之一。當我們在類中使用 @Resource 注解時,Spring 會自動將匹配的依賴注入到目標字段或方法中。
@Resource 的使用方式有以下幾種:
注解應(yīng)用在字段上:
@Resource private SomeDependency someDependency;
注解應(yīng)用在 setter 方法上:
private SomeDependency someDependency; @Resource public void setSomeDependency(SomeDependency someDependency) { this.someDependency = someDependency; }
注解應(yīng)用在構(gòu)造函數(shù)上:
private SomeDependency someDependency; @Resource public MyService(SomeDependency someDependency) { this.someDependency = someDependency; }
注解應(yīng)用在方法的參數(shù)上:
private SomeDependency someDependency; @Resource public void someMethod(@Resource SomeDependency someDependency) { this.someDependency = someDependency; }
需要注意的是,@Resource 注解默認按照名稱進行匹配依賴注入。如果有多個具有相同類型的依賴,可以使用 name 屬性指定依賴的名稱。
@Resource(name = "someDependency2") private SomeDependency someDependency;
此外,@Resource 注解還可以添加 mappedName 屬性來指定依賴的 JNDI 名稱。
總結(jié)來說,@Resource 注解是用于進行依賴注入的注解,它可以應(yīng)用于字段、方法、參數(shù)或者類上。默認按照名稱進行依賴匹配,也可以通過 name 屬性或者 mappedName 屬性指定依賴的名稱。在 Spring Framework 中,@Resource 注解與 @Autowired 注解類似,但略有區(qū)別。
三、@Autowired詳解
@Autowired 是 Spring Framework 中用于進行依賴注入的注解之一。它可以用于自動裝配依賴關(guān)系,使得在需要使用某個依賴時,Spring 可以自動將合適的實例注入到目標對象中。
@Autowired 注解可以應(yīng)用于字段、構(gòu)造函數(shù)、setter 方法和方法的參數(shù)上。
使用 @Autowired 注解時,Spring 會根據(jù)類型進行依賴匹配,它會嘗試找到與目標類型匹配的依賴,并將其注入到目標對象中。如果存在多個匹配的依賴時,可以使用 @Qualifier 注解來指定具體注入哪個實例。
下面是 @Autowired 注解的幾種用法:
注解應(yīng)用在字段上:
@Autowired private SomeDependency someDependency;
注解應(yīng)用在構(gòu)造函數(shù)上:
private SomeDependency someDependency; @Autowired public MyService(SomeDependency someDependency) { this.someDependency = someDependency; }
注解應(yīng)用在 setter 方法上:
private SomeDependency someDependency; @Autowired public void setSomeDependency(SomeDependency someDependency) { this.someDependency = someDependency; }
注解應(yīng)用在方法的參數(shù)上:
private SomeDependency someDependency; @Autowired public void someMethod(SomeDependency someDependency) { this.someDependency = someDependency; }
需要注意的是,默認情況下,@Autowired 注解要求依賴必須存在,即依賴對象不能為空。如果想要指定依賴為非必需,可以設(shè)置 required 屬性為 false。
@Autowired(required = false) private SomeDependency someDependency;
此外,@Autowired 注解還可以與 @Qualifier 注解一起使用,從而精確指定要注入的依賴實例。
總結(jié)來說,@Autowired 注解是 Spring Framework 中用于進行依賴注入的注解,它可以應(yīng)用于字段、構(gòu)造函數(shù)、setter 方法和方法的參數(shù)上。它根據(jù)類型進行依賴匹配,默認要求依賴必須存在,可以使用 @Qualifier 注解指定具體注入哪個實例,也可以設(shè)置 required 屬性為 false 來聲明依賴為非必需。使用 @Autowired 可以簡化代碼,減少手動注入的工作量。
到此這篇關(guān)于SpringBoot注解篇之@Resource與@Autowired的使用區(qū)別的文章就介紹到這了,更多相關(guān)SpringBoot @Resource與@Autowired內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解析Arthas協(xié)助排查線上skywalking不可用問題
這篇文章主要為大家介紹了解析Arthas協(xié)助排查線上skywalking不可用的問題詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-02-02Java實戰(zhàn)之藥品管理系統(tǒng)的實現(xiàn)
這篇文章主要介紹了利用Java實現(xiàn)的藥品管理系統(tǒng),本項目屬于前后端分離的項目,分為兩個角色藥品管理員和取藥處人員,感興趣的小伙伴可以學習一下2022-04-04Spring的@Validation和javax包下的@Valid區(qū)別以及自定義校驗注解
這篇文章主要介紹了Spring的@Validation和javax包下的@Valid區(qū)別以及自定義校驗注解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01RocketMQ源碼解析topic創(chuàng)建機制詳解
這篇文章主要為大家介紹了RocketMQ源碼解析topic創(chuàng)建機制詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08Java使用@Retryable注解實現(xiàn)HTTP請求重試
HTTP調(diào)用是Java應(yīng)用與外部API進行交互時重要的訪問方式之一,為了確保在遇到臨時性問題時能自動重試,我們可以設(shè)計一個靈活的重試機制,在Java中,我們可以通過注解來實現(xiàn)這一功能,文將介紹如何使用注解@Retryable來實現(xiàn)HTTP調(diào)用的重試機制,需要的朋友可以參考下2024-10-10