一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Spring中@Autowired與@Resource的區(qū)別詳析

Spring中@Autowired與@Resource的區(qū)別詳析

2022-02-24 13:10每天都要進(jìn)步一點(diǎn)點(diǎn) Java教程

@Autowired與@Resource都可以用來裝配bean,都可以寫在字段上,或?qū)懺趕etter方法上,下面這篇文章主要給大家介紹了關(guān)于Spring中@Autowired與@Resource區(qū)別的相關(guān)資料,需要的朋友可以參考下

一、定義

  • @Autowired

對(duì)類成員變量、方法及構(gòu)造函數(shù)進(jìn)行標(biāo)注,完成自動(dòng)裝配的工作。

  • @Resource

在語義上被定義為通過其唯一的名稱來標(biāo)識(shí)特定的目標(biāo)組件,其中聲明的類型與匹配過程無關(guān)。

如果沒有明確指定名稱,則默認(rèn)名稱是從字段名稱或設(shè)置方法(get、set方法)派生的。 如果用在字段上,則采用字段名稱; 如果用在在setter方法,它采用其屬性名稱(例如setProperty()方法,取property做為屬性名稱)。

 

二、區(qū)別

在Spring框架中,如果在Service層中需要注入其他依賴的對(duì)象,通常我們都會(huì)使用@Autowired或者@Resource注解,但是它們是有區(qū)別的,比如@Autowired跟Spring框架強(qiáng)耦合了, 如果換成其他框架,@Autowired就沒作用了。而@Resource是JSR-250提供的,它是Java標(biāo)準(zhǔn),絕大部分框架都支持。

接下來,我們總結(jié)一下@Autowired和@Resource的區(qū)別:

(一)、包含的屬性不同

@Autowired只包含一個(gè)參數(shù):required,表示是否開啟自動(dòng)注入,默認(rèn)是true。而@Resource包含七個(gè)參數(shù),其中最重要的兩個(gè)參數(shù)是:name 和 type。如下:

public @interface Autowired {

  /**
   * 是否開啟自動(dòng)注入,有些時(shí)候我們不想使用自動(dòng)裝配功能,可以將該參數(shù)設(shè)置成false。
   */
	boolean required() default true;

}


public @interface Resource {
  /**
   * bean的名稱
   */
  String name() default "";

  String lookup() default "";

  /**
   * Java類,被解析為bean的類型
   */
  Class<?> type() default java.lang.Object.class;

  enum AuthenticationType {
          CONTAINER,
          APPLICATION
  }

  /**
   * 身份驗(yàn)證類型
   */
  AuthenticationType authenticationType() default AuthenticationType.CONTAINER;

  /**
   * 組件是否可以與其他組件之間共享
   */
  boolean shareable() default true;

  String mappedName() default "";

  /**
   * 描述
   */
  String description() default "";
}

(二)、@Autowired默認(rèn)按byType自動(dòng)裝配,而@Resource默認(rèn)byName自動(dòng)裝配。

@Autowired如果要使用byName,需要使用@Qualifier一起配合。而@Resource如果指定了name,則用byName自動(dòng)裝配,如果指定了type,則用byType自動(dòng)裝配。

(三)、注解應(yīng)用的地方不同

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

(四)、出處不同

@Autowired是Spring定義的注解,而@Resource是JSR-250定義的注解。所以@Autowired只能在Spring框架下使用,而@Resource則可以與其他框架一起使用。

(五)、裝配順序不同

@Autowired的裝配順序如下:

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

Spring中@Autowired與@Resource的區(qū)別詳析

@Resource的裝配順序如下:

如果同時(shí)指定了name和type,流程如下:

Spring中@Autowired與@Resource的區(qū)別詳析

如果指定了name,流程如下:

只是指定了@Resource注解的name,則按name后的名字去bean元素里查找有與之相等的name屬性的bean。

Spring中@Autowired與@Resource的區(qū)別詳析

如果指定了type,流程如下:

只指定@Resource注解的type屬性,則從上下文中找到類型匹配的唯一bean進(jìn)行裝配,找不到或者找到多個(gè),都會(huì)拋出異常。

Spring中@Autowired與@Resource的區(qū)別詳析

如果既沒有指定name,也沒有指定type,流程如下:

既不指定name屬性,也不指定type屬性,則自動(dòng)按byName方式進(jìn)行查找。如果沒有找到符合的bean,則回退為一個(gè)原始類型進(jìn)行進(jìn)行查找,如果找到就注入。

Spring中@Autowired與@Resource的區(qū)別詳析

 

總結(jié)

到此這篇關(guān)于Spring中@Autowired與@Resource區(qū)別的文章就介紹到這了,更多相關(guān)Spring中@Autowired與@Resource區(qū)別內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/Weixiaohuai/article/details/120853683

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91免费精品国自产拍在线可以看 | 国产精品反差婊在线观看 | 精品国产乱码久久久久久免费流畅 | 果冻传媒在线播放观看w | 桃乃木香奈作品在线观看 | 久久99re热在线观看视频 | 给我视频免费看 | julia ann一hd | 国产成+人+亚洲+欧美综合 | 亚洲精品97福利在线 | 俄罗斯三级在线观看级 | a∨79成人网| 欧美精品久久久久久久免费观看 | 精品亚洲午夜久久久久 | 欧美精品超清在线播放 | bnb998八度免费影院丫意浓 | 成人午夜毛片 | 精品手机在线1卡二卡3卡四卡 | 经典欧美gifxxoo动态图暗网 | 被高跟鞋调教丨vk | 精品国产免费观看一区高清 | 日本三级在丈面前被耍了 | 亚洲国产精品久久人人爱 | 国产一区二区精品久久 | xxxx18日本视频xxxxx | 午夜福利合集1000在线 | 无遮18禁在线永久免费观看挡 | 日本高清中文字幕视频在线 | 91在线亚洲精品一区 | 99草视频 | 欧美式禁忌 | 国产精品亚洲片在线不卡 | 臀控福利大臀的网站 | 高h短篇辣肉各种姿势bl | 亚洲va欧美va国产va天堂影 | 暖暖的视频完整视频韩国免费 | 4444kk在线看片 | 好硬好大好浪夹得好紧h | 欧美男女爱爱视频 | 欧美亚洲国产成人不卡 | 深夜啪啪网站 |