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 注解。需要根據具體的情況選擇適合的注解進行依賴注入。
二、@Resource詳解
@Resource 是 Java EE 的注解之一,它用于進行依賴注入。@Resource 注解可以應用于字段、方法、參數或者類上。
在 Spring Framework 中,@Resource 注解是由 Spring 提供的用于進行依賴注入的注解之一。當我們在類中使用 @Resource 注解時,Spring 會自動將匹配的依賴注入到目標字段或方法中。
@Resource 的使用方式有以下幾種:
注解應用在字段上:
@Resource private SomeDependency someDependency;
注解應用在 setter 方法上:
private SomeDependency someDependency; @Resource public void setSomeDependency(SomeDependency someDependency) { this.someDependency = someDependency; }
注解應用在構造函數上:
private SomeDependency someDependency; @Resource public MyService(SomeDependency someDependency) { this.someDependency = someDependency; }
注解應用在方法的參數上:
private SomeDependency someDependency; @Resource public void someMethod(@Resource SomeDependency someDependency) { this.someDependency = someDependency; }
需要注意的是,@Resource 注解默認按照名稱進行匹配依賴注入。如果有多個具有相同類型的依賴,可以使用 name 屬性指定依賴的名稱。
@Resource(name = "someDependency2") private SomeDependency someDependency;
此外,@Resource 注解還可以添加 mappedName 屬性來指定依賴的 JNDI 名稱。
總結來說,@Resource 注解是用于進行依賴注入的注解,它可以應用于字段、方法、參數或者類上。默認按照名稱進行依賴匹配,也可以通過 name 屬性或者 mappedName 屬性指定依賴的名稱。在 Spring Framework 中,@Resource 注解與 @Autowired 注解類似,但略有區(qū)別。
三、@Autowired詳解
@Autowired 是 Spring Framework 中用于進行依賴注入的注解之一。它可以用于自動裝配依賴關系,使得在需要使用某個依賴時,Spring 可以自動將合適的實例注入到目標對象中。
@Autowired 注解可以應用于字段、構造函數、setter 方法和方法的參數上。
使用 @Autowired 注解時,Spring 會根據類型進行依賴匹配,它會嘗試找到與目標類型匹配的依賴,并將其注入到目標對象中。如果存在多個匹配的依賴時,可以使用 @Qualifier 注解來指定具體注入哪個實例。
下面是 @Autowired 注解的幾種用法:
注解應用在字段上:
@Autowired private SomeDependency someDependency;
注解應用在構造函數上:
private SomeDependency someDependency; @Autowired public MyService(SomeDependency someDependency) { this.someDependency = someDependency; }
注解應用在 setter 方法上:
private SomeDependency someDependency; @Autowired public void setSomeDependency(SomeDependency someDependency) { this.someDependency = someDependency; }
注解應用在方法的參數上:
private SomeDependency someDependency; @Autowired public void someMethod(SomeDependency someDependency) { this.someDependency = someDependency; }
需要注意的是,默認情況下,@Autowired 注解要求依賴必須存在,即依賴對象不能為空。如果想要指定依賴為非必需,可以設置 required 屬性為 false。
@Autowired(required = false) private SomeDependency someDependency;
此外,@Autowired 注解還可以與 @Qualifier 注解一起使用,從而精確指定要注入的依賴實例。
總結來說,@Autowired 注解是 Spring Framework 中用于進行依賴注入的注解,它可以應用于字段、構造函數、setter 方法和方法的參數上。它根據類型進行依賴匹配,默認要求依賴必須存在,可以使用 @Qualifier 注解指定具體注入哪個實例,也可以設置 required 屬性為 false 來聲明依賴為非必需。使用 @Autowired 可以簡化代碼,減少手動注入的工作量。
到此這篇關于SpringBoot注解篇之@Resource與@Autowired的使用區(qū)別的文章就介紹到這了,更多相關SpringBoot @Resource與@Autowired內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring的@Validation和javax包下的@Valid區(qū)別以及自定義校驗注解
這篇文章主要介紹了Spring的@Validation和javax包下的@Valid區(qū)別以及自定義校驗注解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01RocketMQ源碼解析topic創(chuàng)建機制詳解
這篇文章主要為大家介紹了RocketMQ源碼解析topic創(chuàng)建機制詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08