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

每日一面系列-spring中@Autowired 和 @Resource 區(qū)別?

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

@Autowired注解是由Spring提供的,它可以用來(lái)對(duì)構(gòu)造方法、成員變量及方法參數(shù)進(jìn)行標(biāo)注,它能夠根據(jù)對(duì)象類(lèi)型完成自動(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;  ?  }}

再來(lái)看@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無(wú)區(qū)別。與@Autowired不同的是,它適用于所有的Java框架,而@Autowired只適用于Spring。讀者可以簡(jiǎn)單地理解為,@Resource能夠支持對(duì)象類(lèi)型注入,也能夠支持對(duì)象名稱(chēng)注入。

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

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

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

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

public @interface Autowired {
 ? ? // 是否開(kāi)啟自動(dòng)注入,在不開(kāi)啟自動(dòng)裝配時(shí),可設(shè)為false
 ?  boolean required() default true; }

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

public @interface Resource { ?  // Bean的名稱(chēng) ? ?  String name() default "";  ?  String lookup() default "";  ? ? // Java類(lèi),被解析為Bean的類(lèi)型 ?  Class<?> type() default java.lang.Object.class;  ?  enum AuthenticationType { ? ? ? ? ?  CONTAINER, ? ? ? ? ?  APPLICATION ?  }  ?  // 身份驗(yàn)證類(lèi)型 ?  ?  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能用在類(lèi)、成員變量和方法參數(shù)上,源碼如下。

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @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)出異常。裝配順序如下圖所示。

每日一面系列-spring中@Autowired 和 @Resource 區(qū)別?,每日一面系列,spring,java,面試

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

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

每日一面系列-spring中@Autowired 和 @Resource 區(qū)別?,每日一面系列,spring,java,面試

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

每日一面系列-spring中@Autowired 和 @Resource 區(qū)別?,每日一面系列,spring,java,面試

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

每日一面系列-spring中@Autowired 和 @Resource 區(qū)別?,每日一面系列,spring,java,面試

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

每日一面系列-spring中@Autowired 和 @Resource 區(qū)別?,每日一面系列,spring,java,面試

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

每日一面系列-spring中@Autowired 和 @Resource 區(qū)別?,每日一面系列,spring,java,面試

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

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

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

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

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

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

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(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)文章

  • autowired和resource注解的區(qū)別

    注入規(guī)則不同 Autowired注解是spring的注解,此注解只根據(jù)type進(jìn)行注入,不會(huì)去匹配name.但是如果只根據(jù)type無(wú)法辨別注入對(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ù)類(lèi)型進(jìn)行匹配)。 @Resource 是 JDK 提供的注解。默認(rèn)注入方式為 byName(根據(jù)名稱(chēng)進(jìn)行匹配)。 當(dāng)一個(gè)接口存在多個(gè)實(shí)現(xiàn)類(lèi)的情況下,@Autowired 和@Resource都需要通過(guò)名稱(chēng)

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

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

    2024年02月03日
    瀏覽(20)
  • Spring高手之路-@Autowired和@Resource注解異同點(diǎn)

    Spring高手之路-@Autowired和@Resource注解異同點(diǎn)

    目錄 概述 相同點(diǎn) 1.都可以實(shí)現(xiàn)依賴(lài)注入 2.都可以用于注入任意類(lèi)型的Bean 3.都支持通過(guò)名稱(chēng)、類(lèi)型匹配進(jìn)行注入 不同點(diǎn) 1.來(lái)源不同。 2.包含的屬性不同 3.匹配方式(裝配順序)不同。 4.支持的注入對(duì)象類(lèi)型不同 5.應(yīng)用地方不同 @Autowired 和 @Resource 是在 Java 開(kāi)發(fā)中用于實(shí)現(xiàn)依賴(lài)

    2024年02月03日
    瀏覽(26)
  • 了解Spring中的依賴(lài)注入:@Autowired vs. @Resource

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

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

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

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

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

    2023年04月25日
    瀏覽(26)
  • 使用@Component時(shí)再使用@Resource或@Autowired時(shí)注入失敗問(wèn)題

    在 @Component 注解的類(lèi)下,再使用了 @Resource 或 @Autowired 注解。如此操作會(huì)導(dǎo)致依賴(lài)注入失敗。 這是因?yàn)閟pring加載它們的順序不同,在使用 @Component 注解將bean實(shí)例化到spring容器內(nèi)的時(shí)候,因?yàn)?@Autowired 是在這個(gè)bean之中的,此時(shí) @Autowired 還未完成自動(dòng)裝載,所以導(dǎo)致依賴(lài)注入的

    2024年02月06日
    瀏覽(22)
  • [Java網(wǎng)絡(luò)安全系列面試題] HTTP和HTTPS協(xié)議區(qū)別和聯(lián)系都有哪些?

    [Java網(wǎng)絡(luò)安全系列面試題] HTTP和HTTPS協(xié)議區(qū)別和聯(lián)系都有哪些?

    2.1 HTTP特點(diǎn) 1.支持客戶(hù)/服務(wù)器模式。( C/S 模式) 2.簡(jiǎn)單快速:客戶(hù)向服務(wù)器請(qǐng)求服務(wù)時(shí),只需傳送請(qǐng)求方法和路徑。請(qǐng)求方法常用的有 GET 、 HEAD 、 POST 。每種方法規(guī)定了客戶(hù)與服務(wù)器聯(lián)系的類(lèi)型不同。由于 HTTP 協(xié)議簡(jiǎn)單,使得 HTTP 服務(wù)器的程序規(guī)模小,因而通信速度很快。

    2024年04月23日
    瀏覽(31)
  • 每日一道面試題之list和set有什么區(qū)別?

    List和Set 是 Java集合框架中的兩個(gè)接口 ,雖然它們都繼承自Collection接口,但在使用上有一些區(qū)別。 有序性 : List是有序的集合 ,它 按照元素的插入順序進(jìn)行存儲(chǔ)和訪問(wèn) ??梢?通過(guò)索引來(lái)訪問(wèn)List中的元素 。而 Set是無(wú)序的集合 ,它不保證元素的順序,也 不能通過(guò)索引來(lái)訪問(wèn)

    2024年02月16日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包