国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

五個(gè)維度,解析 Spring 中 @Autowired 和 @Resource 的區(qū)別

這篇具有很好參考價(jià)值的文章主要介紹了五個(gè)維度,解析 Spring 中 @Autowired 和 @Resource 的區(qū)別。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

@Autowired注解是由Spring提供的,它可以用來對(duì)構(gòu)造方法、成員變量及方法參數(shù)進(jìn)行標(biāo)注,它能夠根據(jù)對(duì)象類型完成自動(dòng)注入,代碼如下:

public class Service {

    // 構(gòu)造方法注入
    @Autowired
    public Service(Service service) {
        this.service = service;
    }

    // 成員變量注入
    @Autowired
    private Service service;
 
    // 方法參數(shù)注入
    @Autowired
    public void setService(Service service) {
        this.service = service;
    }

}

再來看@Resource注解,代碼如下:

public class Service {
    
    @Resource(name = "service1")
    private Service service1;
    
    @Resource(name = "service2")
    private Service service2;

    @Reource
    private Service service3;
 
    @Reource
    private Service service4;

}

它是由JDK提供的,遵循JSR-250規(guī)范,是JDK 1.6及以上加入的新特性。作為Java的標(biāo)準(zhǔn),它的作用和@Autowired無區(qū)別。與@Autowired不同的是,它適用于所有的Java框架,而@Autowired只適用于Spring??梢院唵蔚乩斫鉃椋珸Resource能夠支持對(duì)象類型注入,也能夠支持對(duì)象名稱注入。

@Resource和@Autowired之間具體有哪些區(qū)別呢?

可以從以下5個(gè)方面來分析。

1、注解內(nèi)部定義的參數(shù)不同

@Autowired只包含一個(gè)required參數(shù),默認(rèn)為true,表示開啟自動(dòng)注入。

public @interface Autowired {

    // 是否開啟自動(dòng)注入,在不開啟自動(dòng)裝配時(shí),可設(shè)為false
    boolean required() default true;
 
}

?@Resource 包含7個(gè)參數(shù),其中最重要的兩個(gè)是name和type。

public @interface Resource {

    //資源的JNDI名稱。在spring的注入時(shí),指定bean的唯一標(biāo)識(shí)。
    String name() default "";
 
    //引用指向的資源的名稱。它可以使用全局JNDI名稱鏈接到任何兼容的資源。
    String lookup() default "";
 
    //Java類,被解析為Bean的類型
    Class<?> type() default java.lang.Object.class;
 
    //身份認(rèn)證的類型
    enum AuthenticationType {
         CONTAINER,
         APPLICATION
    }
 
    //指定資源的身份驗(yàn)證類型。它只能為任何受支持類型的連接工廠的資源指定此選項(xiàng),而不能為其他類型的資源指定此選項(xiàng)。
    AuthenticationType authenticationType() default AuthenticationType.CONTAINER;
 
   //指定此資源是否可以在此組件和其他組件之間共享。
    boolean shareable() default true;
 
    //指定資源的映射名稱。
    String mappedName() default "";
 
    //指定資源的描述。
    String description() default "";

}

2、裝配方式的默認(rèn)值不同

@Autowired默認(rèn)按type自動(dòng)裝配,而@Resource默認(rèn)按name自動(dòng)裝配。@Resource注解可以自定義選擇裝配方式,如果指定name,則按name自動(dòng)裝配。如果指定type,則按type自動(dòng)裝配。

3、注解應(yīng)用的范圍不同?

@Autowired能夠用在構(gòu)造方法、成員變量、方法參數(shù)及注解上,而@Resource能用在類、成員變量和方法參數(shù)上,源碼如下。

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired { ... }
@Target({TYPE, FIELD, METHOD})
@Retention(RUNTIME)
public @interface Resource {  ... }

4、出處不同

@Autowired是Spring定義的注解,而@Resource遵循JSR-250的規(guī)范,定義在JDK中。所以@Autowired只能在Spring框架下使用,而@Resource則可以與其他框架一起使用。

5、裝配順序不同?

@Autowired默認(rèn)先與byType進(jìn)行匹配,如果發(fā)現(xiàn)找到多個(gè)Bean,則又按照byName方式進(jìn)行匹配,如果還有多個(gè)Bean,則報(bào)出異常。裝配順序如下圖所示。

五個(gè)維度,解析 Spring 中 @Autowired 和 @Resource 的區(qū)別,# spring,spring,java,數(shù)據(jù)庫?

而@Resource的裝載順序分為如下4種情況。

1)如果同時(shí)指定name和type,則從Spring上下文中找到與它們唯一匹配的Bean進(jìn)行裝配,如果找不到則拋出異常,具體流程如下圖所示。

五個(gè)維度,解析 Spring 中 @Autowired 和 @Resource 的區(qū)別,# spring,spring,java,數(shù)據(jù)庫

2)如果指定name,則從上下文中查找與名稱(ID)匹配的Bean進(jìn)行裝配,如果找不到則拋出異常,具體流程如下圖所示。

五個(gè)維度,解析 Spring 中 @Autowired 和 @Resource 的區(qū)別,# spring,spring,java,數(shù)據(jù)庫

3)如果指定type,則從上下文中找到與類型匹配的唯一Bean進(jìn)行裝配,如果找不到或者找到多個(gè)就會(huì)拋出異常,具體流程如下圖所示。?

五個(gè)維度,解析 Spring 中 @Autowired 和 @Resource 的區(qū)別,# spring,spring,java,數(shù)據(jù)庫

4)如果既沒有指定name,也沒有指定type,則自動(dòng)按byName方式進(jìn)行裝配。如果沒有匹配成功,則仍按照type進(jìn)行匹配,具體流程如下圖所示。

五個(gè)維度,解析 Spring 中 @Autowired 和 @Resource 的區(qū)別,# spring,spring,java,數(shù)據(jù)庫?

下面這張表可以幫助更好地理解和區(qū)分@Autowired和@Resource。

五個(gè)維度,解析 Spring 中 @Autowired 和 @Resource 的區(qū)別,# spring,spring,java,數(shù)據(jù)庫

?總結(jié)一下,兩者在功能上差別不大,使用起來也差不多。但是,在日常開發(fā)中建議使用@Autowired,有以下3個(gè)理由。

  • @Autowired功能略強(qiáng)大。支持優(yōu)先注入、可以配置允許Bean不存在。

  • 若使用Spring框架,則使用其特有的注解更好一點(diǎn)。

  • 有人認(rèn)為@Resource更加通用,因?yàn)樗且粋€(gè)規(guī)范,其他框架也會(huì)支持。目前后端都在用Spring,沒有必要考慮其他框架。

面試點(diǎn)評(píng):我們可以直接告訴面試官這兩個(gè)注解的差異,同時(shí)基于兩個(gè)注解的特性解釋更多的差異,這樣可以更好地體現(xiàn)自己對(duì)這方面知識(shí)的理解深度。面試官想考查求職者對(duì)Spring依賴注入方式的理解,以及對(duì)@Autowired和@Resource兩個(gè)注解底層實(shí)現(xiàn)方面的區(qū)別的理解。求職者在理解了底層實(shí)現(xiàn)的差異后,回答這個(gè)問題會(huì)比較容易。文章來源地址http://www.zghlxwxcb.cn/news/detail-517134.html

到了這里,關(guān)于五個(gè)維度,解析 Spring 中 @Autowired 和 @Resource 的區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 了解Spring中的依賴注入:@Autowired vs. @Resource

    在Spring框架中,依賴注入是一項(xiàng)關(guān)鍵的特性,通過它,我們能夠更靈活、更方便地管理和使用各種組件。在依賴注入的實(shí)現(xiàn)中, @Resource 和 @Autowired 是兩個(gè)常用的注解,它們分別具有不同的特點(diǎn)和用途。在本篇博客中,我們將深入探討這兩個(gè)注解的功能、優(yōu)缺點(diǎn),并提供一些

    2024年02月02日
    瀏覽(33)
  • @Resource和@Autowired的區(qū)別

    @Resource和@Autowired這兩個(gè)注解的作用都是在Spring生態(tài)里面去實(shí)現(xiàn)Bean的依賴注入 首先,@Autowired是Spring里面提供的一個(gè)注解,默認(rèn)是根據(jù)類型來實(shí)現(xiàn)Bean的依賴注入。 @Autowired注解里面有一個(gè)required屬性默認(rèn)值是true,表示強(qiáng)制要求bean實(shí)例的注入,在應(yīng)用啟動(dòng)的時(shí)候,如果IOC容器里

    2024年02月08日
    瀏覽(18)
  • autowired和resource注解的區(qū)別

    注入規(guī)則不同 Autowired注解是spring的注解,此注解只根據(jù)type進(jìn)行注入,不會(huì)去匹配name.但是如果只根據(jù)type無法辨別注入對(duì)象時(shí),就需要配合使用@Qualifier注解或者@Primary注解使用。 Resource注解有兩個(gè)重要的屬性,分別是name和type,如果name屬性有值,則使用byName的自動(dòng)注入策略,將值

    2024年02月10日
    瀏覽(14)
  • @Autowired 和 @Resource 的區(qū)別是什么?

    Java面試題目錄 @Autowired 和 @Resource 的區(qū)別是什么? @Autowired 是 Spring 提供的注解。默認(rèn)的注入方式為byType(根據(jù)類型進(jìn)行匹配)。 @Resource 是 JDK 提供的注解。默認(rèn)注入方式為 byName(根據(jù)名稱進(jìn)行匹配)。 當(dāng)一個(gè)接口存在多個(gè)實(shí)現(xiàn)類的情況下,@Autowired 和@Resource都需要通過名稱

    2024年01月19日
    瀏覽(25)
  • 簡述@Autowired和@Resource的區(qū)別(通俗易懂)

    前言:在日常的開發(fā)項(xiàng)目當(dāng)中,這兩個(gè)注解是經(jīng)常會(huì)用到的,但是在實(shí)際使用當(dāng)中好像使用起來并沒有多大區(qū)別,這里我就對(duì)這兩個(gè)注解進(jìn)行一個(gè)詳細(xì)的區(qū)別總結(jié),通過一個(gè)完整的典型例子進(jìn)行論證,思路清晰明了。 目錄 一、結(jié)論 二、典型案例 2.1、準(zhǔn)備代碼 2.2、使用@A

    2024年02月03日
    瀏覽(20)
  • 深入解析 Spring 的 @Autowired:自動(dòng)裝配的魔法與細(xì)節(jié)

    @Autowired 是 Spring 框架中的一個(gè)重要注解,用于自動(dòng)裝配 bean 依賴。Spring 通過 @Autowired 可以自動(dòng)將匹配的 bean 注入到需要的地方,如屬性、構(gòu)造函數(shù)或 setter 方法等。 下面是 @Autowired 注解的詳細(xì)說明: 作用 自動(dòng)裝配 : @Autowired 注解能夠自動(dòng)裝配 Spring 容器中的 bean,使得開發(fā)

    2024年02月03日
    瀏覽(27)
  • 深入解析 Spring Framework 中 @Autowired 注解的實(shí)現(xiàn)原理

    深入解析 Spring Framework 中 @Autowired 注解的實(shí)現(xiàn)原理

    關(guān)于@Autowired注解的作用 @Autowired 注解在Spring中的作用是實(shí)現(xiàn)依賴注入(Dependency Injection),它用于自動(dòng)裝配(autowiring)Spring Bean 的依賴關(guān)系。具體來說, @Autowired 注解有以下作用: 自動(dòng)裝配依賴 :通過在類的字段、構(gòu)造函數(shù)、方法參數(shù)等地方使用 @Autowired 注解,Spring 容器會(huì)

    2024年02月08日
    瀏覽(20)
  • Spring中@Resource和@Autowire注解的區(qū)別

    @Resource和@Autowired都是用來進(jìn)行依賴注入的注解,但是它們有一些不同之處。 @Autowired是Spring框架中的注解,它可以用來標(biāo)注字段、構(gòu)造函數(shù)、方法等,表示需要自動(dòng)裝配。它可以用來注入依賴的bean。如果有多個(gè)bean符合條件,可能會(huì)拋出異常。 @Resource是Java自帶的注解,它可以

    2023年04月25日
    瀏覽(26)
  • @Autowired 和 @Resource的區(qū)別只知道注入方式不同?那可不行,其性能上也有差距!

    目錄 Autowire vs Resource 性能比較 先上結(jié)論: @Resource查找Bean的時(shí)間復(fù)雜度為O(1): @Autowired查找Bean的時(shí)間復(fù)雜度為O(n): 不能將所有的@Resource無腦替換成@Autowired 結(jié)合源碼分析Autowire vs Resource 性能比較 @Autowire注解的處理地方: org.springframework.beans.factory.annotation.AutowiredAnnotationBea

    2024年02月06日
    瀏覽(20)
  • Spring @Autowired 注解原理

    Spring @Autowired 注解原理

    被掃描的組件配置類 輸出結(jié)果 定位@Autowired所在包 org.springframework.beans.factory.annotation.Autowired 找到同包下 AutowiredAnnotationBeanPostProcessor AutowiredAnnotationBeanPostProcessor 的類繼承圖如下 AutowiredAnnotationBeanPostProcessor實(shí)現(xiàn)了InstantiationAwareBeanPostProcessor與 MergedBeanDefinitionPostProcessor兩個(gè)Bea

    2024年02月16日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包