最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring注解@Qualifier的詳細(xì)用法你知道幾種

 更新時(shí)間:2021年07月12日 09:25:26   作者:FastCoder  
本文給大家分享Spring注解@Qualifier的詳細(xì)用法,包括@Autowired和@Resource區(qū)別介紹,本文通過示例代碼給大家詳細(xì)介紹,感興趣的朋友跟隨小編一起看看吧

環(huán)境:springboot2.3.10

一般使用在項(xiàng)目中使用@Qualifier來限定注入的Bean。

由于項(xiàng)目中我習(xí)慣用@Resource注解,所以這里先對(duì)@Autowired和@Resource進(jìn)行個(gè)簡(jiǎn)單的說明。

@Autowired和@Resource區(qū)別

相同點(diǎn):

@Autowired與@Resource都可以用來裝配Bean。都可以寫在字段上,或?qū)懺趕etter方法上。

區(qū)別:

1、@Autowired(Spring注解)

默認(rèn)按類型裝配,默認(rèn)情況下必須要求依賴對(duì)象必須存在(不存在會(huì)報(bào)錯(cuò)),可以通過required=false屬性設(shè)置非必須 ,如果我們想使用名稱裝配可以結(jié)合@Qualifier注解進(jìn)行使用,示例如下:

@Autowired(required = false)
private Date date ;
@Autowired
@Qualifier("birth")
private Date birthday ;

當(dāng)系統(tǒng)中存在多個(gè)相同類型的Bean時(shí),如果不使用@Qualifier程序啟動(dòng)是會(huì)報(bào)錯(cuò)

@Bean
public Date d1() {
  return new Date() ;
}
@Bean
public Date d2() {
  return new Date() ;
}
@Autowired
private Date date ;

2、@Resoure(JavaEE注解)

默認(rèn)按照名稱進(jìn)行裝配,可以通過name屬性指定名稱,如果沒有指定name屬性,當(dāng)注解寫在字段上時(shí),默認(rèn)取字段名進(jìn)行查找注入,如果寫在setter方法上默認(rèn)取屬性名進(jìn)行裝配。當(dāng)找不到與名稱匹配的bean時(shí)才按照類型進(jìn)行裝配。但是需要注意的是,如果name屬性一旦指定,就只會(huì)按照名稱進(jìn)行裝配。示例:

還是上面的例子

@Resource
private Date date

啟動(dòng)后會(huì)報(bào)錯(cuò):

Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'java.util.Date' available: expected single matching bean but found 2: d1,d2

因?yàn)槲覀儧]有以date為名稱的bean,所以會(huì)按照類型進(jìn)行注入,但是類型又有兩個(gè)Date的Bean。將date改為d1或者d2或者指明name屬性。

@Resource("d1")
private Date date

@Autowired和@Resource就介紹到這里了

常規(guī)用法限定注入類

通過上面的示例我們已經(jīng)了解了@Qualifier的主用

@Autowired
@Qualifier("d1")
private Date date ;

用來限定注入的Bean的名稱。這種用法也是很好的理解,接下來我們介紹通過@Qualifier來篩選限定注入對(duì)象。

@Qualifier篩選注入對(duì)象

直接使用@Qualifier限定

@Qualifier
@Bean
public Date d1() {
  return new Date() ;
}
@Bean
public Date d2() {
  return new Date() ;
}
@Resource
private List<Date> dates = Collections.emptyList() ;

打印dates集合:

集合中注入了2個(gè)Date Bean。

修改代碼:

@Resource
@Qualifier
private List<Date> dates = Collections.emptyList() ;

在屬性上加入@Qualifier注解

執(zhí)行結(jié)果:

只注入了一個(gè)Date Bean。

@Qualifier起到了一個(gè)篩選的作用只有Bean上加有@Qualifier注解的Bean才會(huì)被收集注入。

自定義注解限定注入Bean

@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Qualifier
public @interface FK {

}

注意:該自定義注解上添加有@Qualifier注解。

@FK
@Bean
public Date d1() {
  return new Date() ;
}
@Bean
public Date d2() {
  return new Date() ;
}
@Resource
@FK
private List<Date> dates = Collections.emptyList() ;

運(yùn)行:

注入了一個(gè)Date Bean。

該使用示例在Spring Cloud中Ribbon是也有應(yīng)用的。

在使用Ribbon做負(fù)載均衡時(shí),在配置RestTemplate時(shí)會(huì)加入如下注解:

@LoadBalanced
@Bean
public RestTemplate restTemplate() {
  return new RestTemplate() ;
}
@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Qualifier
public @interface LoadBalanced {
}

在Ribbon的自動(dòng)配置類中:

這里指明了只收集帶有@LoadBalanced注解的RestTemplate對(duì)象。然后給對(duì)應(yīng)RestTemplate設(shè)置攔截器來實(shí)現(xiàn)直接通過服務(wù)名就能調(diào)用接口。接下來簡(jiǎn)單介紹下RestTemplate怎么實(shí)現(xiàn)負(fù)載均衡。

攔截器中就開始獲取服務(wù)名,然后調(diào)用createRequest方法來將serviceName換成真實(shí)的IP

ServiceRequestWrapper類

進(jìn)入ServiceRequestWrapper類,該類重寫了HttpRequest對(duì)象的getURI方法

通過負(fù)載均衡重寫構(gòu)造URI

這里相關(guān)的Ribbon相關(guān)實(shí)現(xiàn)的負(fù)載均衡我們都省略了,這里給出幾個(gè)核心的類:

LoadBalancerAutoConfiguration.java 負(fù)載均衡自動(dòng)配置

RibbonClientConfiguration.java ribbon客戶端相關(guān)配置,比如:負(fù)載均衡的算法,服務(wù)列表的更新,ping健康檢查等。如果想自定義實(shí)現(xiàn)負(fù)載均衡算法可以實(shí)現(xiàn)IRule類。

完畢?。?!

到此這篇關(guān)于Spring注解@Qualifier這種用法你知道嗎?的文章就介紹到這了,更多相關(guān)Spring注解@Qualifier內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot2.x整合shiro權(quán)限框架的使用

    springboot2.x整合shiro權(quán)限框架的使用

    這篇文章主要介紹了springboot2.x整合shiro權(quán)限框架的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java裝飾者模式的示例詳解

    Java裝飾者模式的示例詳解

    裝飾者模式:在不改變?cè)袑?duì)象的基礎(chǔ)之上,動(dòng)態(tài)的將功能附加到對(duì)象上,提供了繼承更有彈性的替代方案,也體現(xiàn)了開閉原則。本文將通過示例詳細(xì)講解一下裝飾者模式,需要的可以參考一下
    2022-02-02
  • java開發(fā)之SQL語句中DATE_FORMAT函數(shù)舉例詳解

    java開發(fā)之SQL語句中DATE_FORMAT函數(shù)舉例詳解

    要將日期值格式化為特定格式,請(qǐng)使用DATE_FORMAT函數(shù),下面這篇文章主要給大家介紹了關(guān)于java開發(fā)之SQL語句中DATE_FORMAT函數(shù)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • 淺談Java枚舉的作用與好處

    淺談Java枚舉的作用與好處

    下面小編就為大家?guī)硪黄獪\談Java枚舉的作用與好處。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-07-07
  • 詳解如何在SpringBoot項(xiàng)目中使用全局異常處理

    詳解如何在SpringBoot項(xiàng)目中使用全局異常處理

    在完整的項(xiàng)目開發(fā)中,異常的出現(xiàn)幾乎是無法避免的;如果凡是有可能出現(xiàn)異常的地方,我們都手動(dòng)的使用try-catch將其捕獲的話,會(huì)使得代碼顯得十分臃腫并且后期不好維護(hù)。本文介紹了pringBoot項(xiàng)目中使用全局異常處理的方法,需要的可以參考一下
    2022-10-10
  • Java Swing窗體關(guān)閉事件的調(diào)用關(guān)系

    Java Swing窗體關(guān)閉事件的調(diào)用關(guān)系

    這篇文章主要為大家詳細(xì)介紹了Java Swing窗體關(guān)閉事件的調(diào)用關(guān)系,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Spring中@RestController和@Controller的使用及區(qū)別

    Spring中@RestController和@Controller的使用及區(qū)別

    這篇文章主要介紹了Spring中@RestController和@Controller的使用及區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • JAVA對(duì)象分析之偏向鎖、輕量級(jí)鎖、重量級(jí)鎖升級(jí)過程

    JAVA對(duì)象分析之偏向鎖、輕量級(jí)鎖、重量級(jí)鎖升級(jí)過程

    這篇文章主要介紹了JAVA對(duì)象分析之偏向鎖、輕量級(jí)鎖、重量級(jí)鎖升級(jí)過程,又對(duì)這方面感興趣的同學(xué)可以跟著一起研究下
    2021-02-02
  • spring mvc rest 接口選擇性加密解密詳情

    spring mvc rest 接口選擇性加密解密詳情

    這篇文章主要介紹了spring mvc rest 接口選擇性加密解密詳情,spring mvc rest接口以前是采用https加密的,但是現(xiàn)在需要更加安全的加密。而且不是對(duì)所有的接口進(jìn)行加密,是對(duì)部分接口進(jìn)行加密,接口返回值進(jìn)行解密
    2022-07-07
  • 在SpringBoot環(huán)境中使用Mockito進(jìn)行單元測(cè)試的示例詳解

    在SpringBoot環(huán)境中使用Mockito進(jìn)行單元測(cè)試的示例詳解

    Mockito特別適用于在Spring Boot環(huán)境中進(jìn)行單元測(cè)試,因?yàn)樗軌蜉p松模擬Spring應(yīng)用中的服務(wù)、存儲(chǔ)庫(kù)、客戶端和其他組件,通過使用Mockito,開發(fā)者可以模擬外部依賴,從而使單元測(cè)試更加獨(dú)立和可靠,本文給大家介紹了在Spring Boot環(huán)境中使用Mockito進(jìn)行單元測(cè)試
    2024-01-01

最新評(píng)論

茌平县| 庆城县| 上杭县| 满洲里市| 东阳市| 阳朔县| 石嘴山市| 双城市| 南漳县| 南澳县| 临沧市| 呼玛县| 余江县| 乐陵市| 鹿邑县| 即墨市| 安远县| 吐鲁番市| 葫芦岛市| 富平县| 商洛市| 柳州市| 榆社县| 陵水| 尖扎县| 白朗县| 临桂县| 土默特左旗| 涟水县| 伊春市| 平泉县| 连山| 岚皋县| 宁津县| 凯里市| 招远市| 横山县| 景德镇市| 象州县| 梁河县| 闽清县|