App下載

理解@Autowired和@Resource注解的區(qū)別

風(fēng)里有詩句 2024-01-04 16:37:16 瀏覽數(shù) (1157)
反饋

在 Spring 框架中,@Autowired 和 @Resource 是兩個(gè)常用的注解,用于實(shí)現(xiàn)依賴注入。盡管它們都可以用于自動(dòng)裝配 Bean,但它們?cè)谀承┓矫娲嬖谝恍﹨^(qū)別。本文將詳細(xì)解釋 @Autowired 和 @Resource 注解的區(qū)別,包括使用方式、依賴查找方式和適用范圍。

下載

@Autowired 注解

@Autowired 注解是 Spring 框架提供的注解之一,用于自動(dòng)裝配 Bean。它可以用于字段、構(gòu)造函數(shù)、Setter 方法以及方法參數(shù)上。當(dāng) Spring 容器創(chuàng)建 Bean 實(shí)例時(shí),會(huì)自動(dòng)解析和注入相應(yīng)的依賴。

@Autowired 注解的特點(diǎn)

  • 默認(rèn)按照類型進(jìn)行依賴查找和注入。
  • 如果存在多個(gè)匹配的 Bean,可以通過指定 Bean 的名稱或使用 @Qualifier 注解來進(jìn)行精確匹配。
  • 可以在構(gòu)造函數(shù)、Setter 方法和字段上使用。

示例代碼

@Component
public class MyClass {
    @Autowired
    private MyDependency myDependency;
    
    // 構(gòu)造函數(shù)注入
    @Autowired
    public MyClass(MyDependency myDependency) {
        this.myDependency = myDependency;
    }
    
    // Setter 方法注入
    @Autowired
    public void setMyDependency(MyDependency myDependency) {
        this.myDependency = myDependency;
    }
    
    // 方法參數(shù)注入
    @Autowired
    public void myMethod(MyDependency myDependency) {
        this.myDependency = myDependency;
    }
}

@Resource 注解

@Resource 注解是 Java EE 提供的注解,也可以用于依賴注入。它可以在字段、Setter 方法和方法參數(shù)上使用。

@Resource 注解的特點(diǎn)

  • 默認(rèn)按照名稱進(jìn)行依賴查找和注入,可以通過指定 name 屬性或使用 @Qualifier 注解來進(jìn)行精確匹配。
  • 可以在字段、Setter 方法和方法參數(shù)上使用。

示例代碼

@Component
public class MyClass {
    @Resource
    private MyDependency myDependency;
    
    // Setter 方法注入
    @Resource
    public void setMyDependency(MyDependency myDependency) {
        this.myDependency = myDependency;
    }
    
    // 方法參數(shù)注入
    public void myMethod(@Resource MyDependency myDependency) {
        this.myDependency = myDependency;
    }
}

@Autowired 和 @Resource 的區(qū)別

  • 來源:@Autowired 是 Spring 框架提供的注解,而 @Resource 是 Java EE 提供的注解。
  • 依賴查找方式:@Autowired 默認(rèn)按照類型進(jìn)行依賴查找和注入,可以通過指定 Bean 名稱或使用 @Qualifier 注解來精確匹配。而 @Resource 默認(rèn)按照名稱進(jìn)行依賴查找和注入,也可以通過指定 name 屬性或使用 @Qualifier 注解來精確匹配。
  • 兼容性:@Autowired 是 Spring 框架的特定注解,只能在 Spring 應(yīng)用中使用。而 @Resource 是 Java EE 提供的注解,可以在任何 Java EE 兼容的應(yīng)用中使用。
  • 注入方式:@Autowired 可以用于字段、構(gòu)造函數(shù)、Setter 方法和方法參數(shù)上。而 @Resource 可以用于字段、Setter 方法和方法參數(shù)上。

總結(jié)

@Autowired 和 @Resource 注解在依賴注入方面有一些區(qū)別。@Autowired 是 Spring 框架提供的注解,按照類型進(jìn)行依賴查找和注入,默認(rèn)適用于 Spring 應(yīng)用;而 @Resource 是 Java EE 提供的注解,按照名稱進(jìn)行依賴查找和注入,適用于任何 Java EE 兼容的應(yīng)用。根據(jù)具體的應(yīng)用場(chǎng)景和需求,選擇合適的注解來實(shí)現(xiàn)依賴注入。

1698630578111788

如果你對(duì)編程知識(shí)和相關(guān)職業(yè)感興趣,歡迎訪問編程獅官網(wǎng)(http://www.o2fo.com/)。在編程獅,我們提供廣泛的技術(shù)教程、文章和資源,幫助你在技術(shù)領(lǐng)域不斷成長(zhǎng)。無論你是剛剛起步還是已經(jīng)擁有多年經(jīng)驗(yàn),我們都有適合你的內(nèi)容,助你取得成功。

0 人點(diǎn)贊