欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

@AutoWired與@Resource-創(chuàng)新互聯(lián)

參考 :

創(chuàng)新互聯(lián)是一家網(wǎng)站設(shè)計(jì)公司,集創(chuàng)意、互聯(lián)網(wǎng)應(yīng)用、軟件技術(shù)為一體的創(chuàng)意網(wǎng)站建設(shè)服務(wù)商,主營產(chǎn)品:響應(yīng)式網(wǎng)站設(shè)計(jì)品牌網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)。我們專注企業(yè)品牌在網(wǎng)站中的整體樹立,網(wǎng)絡(luò)互動(dòng)的體驗(yàn),以及在手機(jī)等移動(dòng)端的優(yōu)質(zhì)呈現(xiàn)。成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、移動(dòng)互聯(lián)產(chǎn)品、網(wǎng)絡(luò)運(yùn)營、VI設(shè)計(jì)、云產(chǎn)品.運(yùn)維為核心業(yè)務(wù)。為用戶提供一站式解決方案,我們深知市場的競爭激烈,認(rèn)真對待每位客戶,為客戶提供賞析悅目的作品,網(wǎng)站的價(jià)值服務(wù)。

@Qualifier - 搜索結(jié)果 - 知乎

@Autowired和@Resource的區(qū)別是什么? - 知乎

面試突擊78:@Autowired 和 @Resource 有什么區(qū)別? - 掘金

目錄

同一類型多個(gè)@Bean報(bào)錯(cuò)問題

@Resource注解

@Resource的查找順序

@Resource注解實(shí)現(xiàn)依賴注入

@Resource的來源

@Resource的方法參數(shù)

@Resource注解的應(yīng)用范圍

@AutoWired

@AutoWired查找順序

@AutoWired依賴注入方式

@AutoWired來源

@AutoWired方法參數(shù)

@AutoWired注解作用范圍

@AutoWired與@Resource的區(qū)別

@Qualifier

@primary

解決同一類型Bean報(bào)錯(cuò)的問題

使用Resource注解解決

使用@AutoWired注解 + @Qualifier注解解決

使用@primary注解解決


我們通過一個(gè)小栗子/一個(gè)問題,引出@AutoWired注解和@Resource注解還有@Qualifier注解,利用注解解決這個(gè)問題,然后在講解@AutoWired注解和@Resource注解以及有啥區(qū)別...

同一類型多個(gè)@Bean報(bào)錯(cuò)問題

引出一個(gè)問題如果同一個(gè)類型有多個(gè)@Bean

換句話說就是在依賴注入的時(shí)候,我們注入一個(gè)Bean的時(shí)候,Spring中有多個(gè)Bean的類型與這個(gè)Bean的類型是一樣的,但名稱不同(Bean名稱是唯一的) 這樣會(huì)有什么問題呢?

這樣說可能還是有一點(diǎn)抽象,我們就來舉一個(gè)例子把.

比如我現(xiàn)在要注入一個(gè)名字為user的對象/Bean

@Autowired
private User user;

但是Spring中存在多個(gè)User類型的Bean. 比如下面:

@Configuration
public class UserBeans {
    @Bean(name = "user_1")
    public User user1(){
        User user = new User();
        user.setId(21);
        user.setAge(19);
        user.setName("UserBeans-->張三");
        return user;
    }
    @Bean(name = "user_2")
    public User user2(){
        User user = new User();
        user.setId(21);
        user.setAge(19);
        user.setName("UserBeans-->張三");
        return user;
    }
}
//------------StudentUserBeans與上面不是一個(gè)類---------
@Configuration
public class StudentUserBeans {
    @Bean(name = "stu_user1")
    public User user1(){
        User user = new User();
        user.setId(21);
        user.setAge(19);
        user.setName("StudentUserBeans-->張三");
        return user;
    }
}

現(xiàn)在有三個(gè)類型為User的Bean,但是三個(gè)Bean的名稱并不一樣,因?yàn)镾pring中規(guī)定Bean的名稱(也就是id)是唯一的.

當(dāng)我們運(yùn)行的時(shí)候會(huì)發(fā)生什么呢???

什么辦法可以解決呢 ?

最簡單最直接的辦法就是,你在存儲(chǔ)一個(gè)名稱為user的Bean,或者將一個(gè)Bean的名稱修改為Bean.

如果我非要使用那三個(gè)其中一個(gè)Bean呢?該怎么辦?

有兩種方法 :

  • 第一種方法 : 使用Resource注解使用自帶的name參數(shù)來指定使用的Bean名稱
  • 第二種方法 : 使用AutoWired注解注入,并且使用Qualifier來進(jìn)行篩選
  • 第三種方法 : 使用primary注解

我先分別講解這幾個(gè)注解,然后在來解決這個(gè)問題

@Resource注解 @Resource的查找順序

既指定name又指定type

如果既指定name又指定type,他就會(huì)在Spring查找name和type唯一匹配的bean,如果沒有找到就會(huì)拋出異常.

只指定name

如果只指定了name的情況,他就會(huì)在Spring中查找name唯一匹配的bean,如果找到了則自動(dòng)裝配,沒有找到則拋出異常,

只指定type

如果只指定了type,那么在Spring中查找type唯一匹配的bean,如果沒有找到就拋出異常.

既沒有指定name,也沒有指定type

好我們在來整體總結(jié)一下 :

依賴注入的功能,是通過先在 Spring IoC 容器中查找對象(分為類型和名稱兩種查找方式),再將對象注入引入到當(dāng)前類中

@Resource的查找順序分為如下四種方式 :

  • 當(dāng)指定name的時(shí)候,按照name唯一匹配的bean進(jìn)行查找,如果查找到了則進(jìn)行自動(dòng)裝配,否則拋出異常
  • 當(dāng)執(zhí)行type的時(shí)候,按照type唯一匹配的bean進(jìn)行查找,如果查找到了則進(jìn)行自動(dòng)裝配,否則拋出異常
  • 當(dāng)既指定name又指定type的時(shí)候,按照name和type進(jìn)行唯一匹配bean進(jìn)行查找,如果查找到了則進(jìn)行自動(dòng)裝配,否則拋出異常
  • 當(dāng)既沒有指定name,也沒有指定type的時(shí)候,先按照name進(jìn)行查找,如果查找到了就進(jìn)行自動(dòng)裝配,如果沒有查找到,繼續(xù)按照類型去查找,如果查找到了則進(jìn)行自動(dòng)裝配,如果沒有查找到或者查找出多個(gè)bean,那么就拋出異常---->@Resource默認(rèn)裝配順序

接著我們趁熱打鐵繼續(xù)講解@Resource注解

@Resource注解也可以實(shí)現(xiàn)依賴注入(@Resource注解是JDK提供的),但是也與AutoWired有一些區(qū)別.

@Resource注解實(shí)現(xiàn)依賴注入

@Resource注解實(shí)現(xiàn)屬性注入

@Resource注解實(shí)現(xiàn)setter注入

@Resource注解并不能實(shí)現(xiàn)構(gòu)造方法注入

@Resource注解不能實(shí)現(xiàn)構(gòu)造方法注入,原因是Resource的執(zhí)行時(shí)機(jī)比構(gòu)造方法執(zhí)行時(shí)機(jī)晚一些.

@Resource的來源

@Resource是JDK提供的一個(gè)注解,遵循JSR-250規(guī)范(Java 250 規(guī)范提案.

所以@Resource注解適用于所有的Java框架

@Resource的方法參數(shù)

@Resource注解提供多個(gè)參數(shù),最重要的就是name和type.

@Resource注解的應(yīng)用范圍

@AutoWired

@AutoWired注解也是可以將依賴的對象注入到當(dāng)前對象中.

我們接下來詳細(xì)分析一下@AutoWired重要的幾點(diǎn)

@AutoWired查找順序

@AutoWired默認(rèn)是先按照類型進(jìn)行匹配Bean,如果匹配了多個(gè)Bean就按照name進(jìn)行匹配,如果還是匹配了多個(gè)Bean就會(huì)拋出異常.

我們仔細(xì)分析@AutoWired的裝配順序

  • 首先先會(huì)按照類型進(jìn)行匹配,如果匹配到了一個(gè)唯一Bean就進(jìn)行自動(dòng)裝配,如果沒有匹配到則拋出異常
  • 如果根據(jù)類型匹配出多個(gè)Bean,就看是否配置了@Qualifier注解
  • 如果沒有配置,則默認(rèn)會(huì)按照名稱進(jìn)行匹配,如果查找到了,則會(huì)進(jìn)行自動(dòng)裝配,如果沒有查找到就會(huì)拋出異常
  • 如果配置了@Qualifier注解則會(huì)根據(jù)它的參數(shù)的名稱進(jìn)行匹配,如果匹配到了則進(jìn)行自動(dòng)裝配,否則就會(huì)拋出異常
@AutoWired依賴注入方式

使用@AutoWired可以實(shí)現(xiàn)三種注入,屬性注入,setter注入,構(gòu)造方法注入.

屬性注入

@Autowired //使用一個(gè)AutoWired這樣的一個(gè)注解---->自動(dòng)裝配的意思
private UserService userService;//UserService成員屬性

屬性注入的優(yōu)點(diǎn)和缺點(diǎn)

優(yōu)點(diǎn) :

  • 屬性注入只需要在屬性上加一個(gè)@AutoWired注解,寫法簡便,可讀性高,易維護(hù).

缺點(diǎn) :

  • 1.不能注入final修飾的屬性.

為啥呢 ?

  • 因?yàn)槲覀冎繨DK是我們最底層的框架,spring是上層,使用spring也要依賴java的,所以要遵循Java的規(guī)范,Java固定被final修飾的屬性1.在定義的時(shí)候就進(jìn)行賦值 2.在構(gòu)造方法內(nèi)部進(jìn)行賦值.

所以,是因?yàn)椴粷M足Java的規(guī)范

  • 2.屬性注入只能在IOC容器才能使用(類與IOC容器高度耦合),使用其他容器/框架的時(shí)候不能使用屬性注入(通用性不好)

  • 3.更容易違背單一職責(zé)原則

啥是單一職責(zé)原則呢 ?

單一職責(zé)原則的核心思想 : 一個(gè)類最好只做一件事,只有一個(gè)引起它變化的原因

換句話說,類只有單一功能,不要為類實(shí)現(xiàn)過多的功能點(diǎn),以保證實(shí)體只有一個(gè)引起職責(zé)變化的原因

一個(gè)類只做一件事,要么做A事情,要么做B事情.只做一件事情

為什么說屬性注入更容易違背單一職責(zé)原則呢 ?

  • 由于屬性注入使用起來簡便,這樣就更容易使得開發(fā)者在類中注入多個(gè)對象,就可能會(huì)導(dǎo)致濫用的概率大大提高,所以違背單一職責(zé)原則的概率就大大提高-->更容易違背 不是一定違背,

setter注入

Setter注入的優(yōu)缺點(diǎn)

優(yōu)點(diǎn) :

  • setter注入滿足單一設(shè)計(jì)/職責(zé)原則.

因?yàn)閟etter方法的特性,一個(gè)setter方法只對應(yīng)一個(gè)對象,不會(huì)有注入多個(gè)對象的可能性,所以滿足單一設(shè)計(jì)/職責(zé)原則

缺點(diǎn) :

  • 不能注入final修飾的對象

還是與屬性注入的解釋是一樣的,原因就是JDK是我們最底層的框架,Spring作為上層,要基于JDK/Java的,所以要滿足Java的規(guī)范,java規(guī)定,被final修飾的屬性1.在定義的時(shí)候進(jìn)行賦值2.在構(gòu)造方法內(nèi)部進(jìn)行賦值

  • 注入的對象可能會(huì)被修改

由于setter方法是可以被多次調(diào)用的,有修改的風(fēng)險(xiǎn),所以注入的對象就可能被修改.

構(gòu)造方法注入

構(gòu)造方法注入的優(yōu)缺點(diǎn)

優(yōu)點(diǎn) :

構(gòu)造方法最牛,上面的缺點(diǎn),都是俺構(gòu)造方法的優(yōu)點(diǎn).

就比如,屬性注入和setter注入都不能解決注入final修飾的屬性問題,那對于構(gòu)造方法注入就能夠解決

  • 能夠注入final修飾的屬性

為什么構(gòu)造方法可以注入final修飾的屬性呢?

原因還是一樣的,因?yàn)闈M足Java的規(guī)范,被final修飾的屬性 一個(gè)是定義的時(shí)候就進(jìn)行賦值,一個(gè)是在構(gòu)造方法內(nèi)部進(jìn)行賦值.滿足第二條,所以可以注入final修飾的屬性.

  • 注入的對象不會(huì)被修改.

構(gòu)造方法注入 注入的對象不會(huì)被修改,因?yàn)闃?gòu)造方法只會(huì)執(zhí)行一次.

  • 構(gòu)造方法注入是完全初始化的.

因?yàn)橐蕾囎⑷胧窃跇?gòu)造方法內(nèi)部執(zhí)行的,而構(gòu)造方法又是在類起初創(chuàng)建的時(shí)候就執(zhí)行的,所以會(huì)被完全初始化

  • 它的通用性會(huì)更好

構(gòu)造方法注入因?yàn)榛趈ava的,JDK是最底層框架,所以無論在哪一個(gè)容器/框架都可以適用

缺點(diǎn) :

  • 構(gòu)造方法可以注入多個(gè)對象,也就違背了單一設(shè)計(jì)原則
  • 寫法不簡便

官方建議

在Spring4.2之前推薦的注入用法就是setter注入,因?yàn)閟etter注入更加符合單一設(shè)計(jì)/職責(zé)原則

在Spring4.2之后官方就推薦使用構(gòu)造方法注入的方式(因?yàn)樗膬?yōu)點(diǎn)).如果要傳入太多參數(shù)就需要考慮單一設(shè)計(jì)原則問題了.

但是我們在開發(fā)的時(shí)候依然會(huì)使用屬性注入的方式,因?yàn)閷懛ê芎啽?

@AutoWired來源

@AutoWired注解是來自于Spring的,也就是來自于IOC容器,換句話說,@AutoWired注解只支持spring框架,不能在其他框架使用@AutoWired

@AutoWired方法參數(shù)

@AutoWired就只有一個(gè)required的參數(shù).

required參數(shù) : 設(shè)置為true的時(shí)候認(rèn)為可以自動(dòng)注入 ,false就是關(guān)閉自動(dòng)注入

@AutoWired注解作用范圍

這個(gè)源碼可以看的出來.

根據(jù)源碼可以看的出來,@AutoWired注解支持構(gòu)造方法,成員變量,成員方法以及注解上..

@AutoWired與@Resource的區(qū)別
  • 來源不同

@AutoWired注解來自于Spring,只支持Spring框架,不能在其他框架中使用

@Resource注解是JDK提供的遵循JSR-250規(guī)范,可以適用于所有的Java框架

  • 裝配順序不同

@AutoWired默認(rèn)裝配順序是先按照類型進(jìn)行匹配,如果匹配了多個(gè)Bean就在按照名稱進(jìn)行匹配,如果沒有找到或者匹配到多個(gè)就會(huì)拋出異常,如果期間配置了@Qualifier注解就會(huì)按照它的參數(shù)進(jìn)行匹配,如果匹配到了則進(jìn)行自動(dòng)裝配,沒有匹配就拋出異常

@Resource注解默認(rèn)的裝配順序是先按照名稱進(jìn)行匹配,如果沒有匹配或者匹配多個(gè),則按照類型進(jìn)行匹配,如果還沒有匹配到或者匹配出多個(gè)則拋出異常.如果指定name則按照name進(jìn)行唯一匹配,如果指定type則按照type進(jìn)行唯一匹配,沒有匹配到就拋出異常,如果既指定name也指定type那么就按照name和type進(jìn)行唯一匹配,匹配到了則自動(dòng)裝配,沒有匹配到則拋出異常.

  • 方法的參數(shù)不同

@AutoWired注解只有一個(gè)required參數(shù),表示是否開啟自動(dòng)注入

@Resource注解有多個(gè)方法參數(shù),最重要的2個(gè)參數(shù)是name和type

  • 注解應(yīng)用的范圍不同

@AutoWired注解可以加在成員變量,成員方法,方法參數(shù)及注解上

@Resource注解可以加在 類,成員變量,方法上.

  • 依賴注入的方式不同

@AutoWired注解支持屬性注入,setter注入,構(gòu)造方法注入

@Resource注解支持屬性注入,setter注入,但是不支持構(gòu)造方法注入

@Qualifier

Qualifier意思是合格者,一般跟Autowired配合使用,需要指定一個(gè)bean的名稱,通過bean名稱就能找到需要裝配的bean。

我們一般是使用@AutoWired進(jìn)行Bean的注入的,但是當(dāng)有同一個(gè)類型多個(gè)Bean的時(shí)候,Spring就會(huì)拋出異常NoUniqueBeanDefinitionException

如下 :

我們就可以使用注解@Qualifier注解中填入我們想要裝配Bean的名稱,所以,通過將 @Qualifier 注解與我們想要指定特定的Bean名稱一起裝配,這樣Spring就會(huì)從多個(gè)相同類型并滿足裝配的要求找出我們想要的Bean

如果@Primary和@Qualifier注解都在那么會(huì)優(yōu)先執(zhí)行@Qualifier

@primary

當(dāng)我們使用自動(dòng)配置的方式裝配Bean時(shí),如果這個(gè)Bean有多個(gè)候選者,假如其中一個(gè)候選者具有@Primary注解修飾,該候選者會(huì)被選中,作為自動(dòng)配置的值。

如果@Primary和@Qualifier注解都在那么會(huì)優(yōu)先執(zhí)行@Qualifier

解決同一類型Bean報(bào)錯(cuò)的問題 使用Resource注解解決

使用Resource注解來解決上述問題,并仔細(xì)講解Resource注解

使用@AutoWired注解 + @Qualifier注解解決

Qualifier意思是合格者,一般跟Autowired配合使用,需要指定一個(gè)bean的名稱,通過bean名稱就能找到需要裝配的bean。

使用@primary注解解決

當(dāng)我們使用自動(dòng)配置的方式裝配Bean時(shí),如果這個(gè)Bean有多個(gè)候選者,假如其中一個(gè)候選者具有@Primary注解修飾,該候選者會(huì)被選中,作為自動(dòng)配置的值。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

文章標(biāo)題:@AutoWired與@Resource-創(chuàng)新互聯(lián)
文章分享:http://aaarwkj.com/article6/gdpig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、云服務(wù)器、App開發(fā)微信小程序、定制網(wǎng)站軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司
玩弄丰满熟妇留守妇女| 久久伊人这里都是精品| 欧美亚洲清纯唯美另类| 欧美日本国产专区一区| 少妇高潮毛片免费看高潮| 国产91人妻精品一区二区三区| 欧美精品一区二区亚洲| 成人国产在线欧美精品| 日本a亚洲中文字幕永远| 18末年禁止观看免费软件| 美女丝袜美腿魅惑男人| 国产视频一区二区三区网| 国产精品一级片免费看| 亚洲中文字幕精品视频乱码| 97水蜜桃视频在线观看| 日本韩国亚洲欧美一区二区| 国产一区二区三区午夜视频| 日本午夜熟女九色视频| 国产白丝诱惑在线视频| 日韩在线免费色视频| 五月婷婷丁香视频在线| 四虎国产精品久久久久久网址| 69国产精品久久久久久人| 国产女技师口爆在线观看| 亚洲国产欧美日韩在线一区| 久久99久久久久久精品| 欧美激情日韩精品久久久| 丰满人妻被猛烈进入中| 亚洲乱色熟女一区二区三区麻豆| 国内外成人皇色视频| 一区二区人妻乳中文字幕| 亚洲中文字幕在线乱码| 国产九色av在线一区尤物| 日韩精品少妇一区二区在线看 | 91免费看片在线观看| 91免费人成网站在线观看| 久久99热最新地址获取| 亚洲精品一区二区三区毛片| 欧美一级免费黄片在线播放| 国产手机在线91精品观看| 久久久精品国产亚洲av日韩|