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

Spring注解@Qualifier的使用&&與@Primary注解的不同

 更新時(shí)間:2023年10月17日 11:53:25   作者:Doker?多克?技術(shù)人的數(shù)碼品牌  
今天帶你了解一下Spring框架中的@Qualifier?注解,它解決了哪些問(wèn)題,以及如何使用它,我們還將了解它與?@Primary?注解的不同之處,感興趣的朋友跟隨小編一起看看吧

1. 概述

今天帶你了解一下 Spring 框架中的 @Qualifier 注解,它解決了哪些問(wèn)題,以及如何使用它。我們還將了解它與 @Primary 注解的不同之處。更多的技術(shù)解析請(qǐng)?jiān)L問(wèn) felord.cn

2. 痛點(diǎn)

使用 @Autowired 注解是 Spring 依賴(lài)注入的絕好方法。但是有些場(chǎng)景下僅僅靠這個(gè)注解不足以讓Spring知道到底要注入哪個(gè) bean。
默認(rèn)情況下,@Autowired 按類(lèi)型裝配 Spring Bean。
如果容器中有多個(gè)相同類(lèi)型的 bean,則框架將拋出 NoUniqueBeanDefinitionException, 以提示有多個(gè)滿(mǎn)足條件的 bean 進(jìn)行自動(dòng)裝配。程序無(wú)法正確做出判斷使用哪一個(gè),下面就是個(gè)鮮活的例子:

    @Component("fooFormatter")
    public class FooFormatter implements Formatter {
        public String format() {
            return "foo";
        }
    }
    @Component("barFormatter")
    public class BarFormatter implements Formatter {
        public String format() {
            return "bar";
        }
    }
    @Component
    public class FooService {
        @Autowired
        private Formatter formatter;
        //todo 
    }

如果我們嘗試將 FooService 加載到我們的上下文中,Spring 框架將拋出 NoUniqueBeanDefinitionException。這是因?yàn)?nbsp;Spring 不知道要注入哪個(gè) bean。為了避免這個(gè)問(wèn)題,有幾種解決方案。那么我們本文要講解的 @Qualifier 注解就是其中之一。跟著小胖哥的節(jié)奏往下走。

3. @Qualifier

通過(guò)使用 @Qualifier 注解,我們可以消除需要注入哪個(gè) bean 的問(wèn)題。讓我們重新回顧一下前面的例子,看看我們?nèi)绾瓮ㄟ^(guò)包含 @Qualifier 注釋來(lái)指出我們想要使用哪個(gè) bean 來(lái)解決問(wèn)題:

    @Component
    public class FooService {
        @Autowired
        @Qualifier("fooFormatter")
        private Formatter formatter;
        //todo 
    }

通過(guò)將 @Qualifier 注解與我們想要使用的特定 Spring bean 的名稱(chēng)一起進(jìn)行裝配,Spring 框架就能從多個(gè)相同類(lèi)型并滿(mǎn)足裝配要求的 bean 中找到我們想要的,避免讓Spring腦裂。我們需要做的是@Component或者@Bean注解中聲明的value屬性以確定名稱(chēng)。
其實(shí)我們也可以在 Formatter 實(shí)現(xiàn)類(lèi)上使用 @Qualifier 注釋?zhuān)皇窃?nbsp;@Component 或者 @Bean 中指定名稱(chēng),也能達(dá)到相同的效果:

     @Component
     @Qualifier("fooFormatter")
     public class FooFormatter implements Formatter {
         public String format() {
             return "foo";
         }
     }
     @Component
     @Qualifier("barFormatter")
     public class BarFormatter implements Formatter {
         public String format() {
             return "bar";
         }
     }

4. @Qualifier VS @Primary

還有另一個(gè)名為 @Primary 的注解,我們也可以用來(lái)發(fā)生依賴(lài)注入的歧義時(shí)決定要注入哪個(gè) bean。當(dāng)存在多個(gè)相同類(lèi)型的 bean 時(shí),此注解定義了首選項(xiàng)。除非另有說(shuō)明,否則將使用與 @Primary 注釋關(guān)聯(lián)的 bean 。
我們來(lái)看一個(gè)例子:

    @Bean
    public Employee tomEmployee() {
        return new Employee("Tom");
    }
    @Bean
    @Primary
    public Employee johnEmployee() {
        return new Employee("john");
    }

在此示例中,兩個(gè)方法都返回相同的 Employee類(lèi)型。Spring 將注入的 bean 是方法 johnEmployee 返回的 bean。這是因?yàn)樗?nbsp;@Primary 注解。當(dāng)我們想要指定默認(rèn)情況下應(yīng)該注入特定類(lèi)型的 bean 時(shí),此注解很有用。
如果我們?cè)谀硞€(gè)注入點(diǎn)需要另一個(gè) bean,我們需要專(zhuān)門(mén)指出它。我們可以通過(guò) @Qualifier 注解來(lái)做到這一點(diǎn)。例如,我們可以通過(guò)使用 @Qualifier 注釋來(lái)指定我們想要使用 tomEmployee 方法返回的 bean 。
值得注意的是,如果 @Qualifier 和 @Primary 注釋都存在,那么 @Qualifier 注釋將具有優(yōu)先權(quán)。基本上,@Primary 是定義了默認(rèn)值,而 @Qualifier 則非常具體。
當(dāng)然@Component 也可以使用@Primary 注解,這次使用的還是上面3的示例:

     @Component
     @Primary
     public class FooFormatter implements Formatter {
         public String format() {
             return "foo";
         }
     }
     @Component
     public class BarFormatter implements Formatter {
         public String format() {
             return "bar";
         }
     }

在這種情況下,@Primary 注解指定了默認(rèn)注入的是 FooFormatter,消除了場(chǎng)景中的注入歧義。

5. 通過(guò)名稱(chēng)來(lái)自動(dòng)注入

在使用 @Autowired 進(jìn)行自動(dòng)裝配時(shí),如果 Spring 沒(méi)有其他提示,將會(huì)按照需要注入的變量名稱(chēng)來(lái)尋找合適的 bean。也可以解決依賴(lài)注入歧義的問(wèn)題。讓我們看一些基于我們最初的例子的代碼:

    @Component
    public class FooService {
        @Autowired
        private Formatter fooFormatter;
        //todo 
    }

在這種情況下,Spring 將確定要注入的 bean 是 FooFormatter,因?yàn)樽侄蚊Q(chēng)與我們?cè)谠?nbsp;bean 的 @Component或者 @Bean 注解中使用的值(默認(rèn) @Bean 使用方法名)相匹配。

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

相關(guān)文章

  • java 獲取當(dāng)前時(shí)間的三種方法

    java 獲取當(dāng)前時(shí)間的三種方法

    這篇文章主要介紹了java 獲取當(dāng)前時(shí)間的三種方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java實(shí)現(xiàn)打印二叉樹(shù)所有路徑的方法

    Java實(shí)現(xiàn)打印二叉樹(shù)所有路徑的方法

    這篇文章主要介紹了Java實(shí)現(xiàn)打印二叉樹(shù)所有路徑的方法,涉及java二叉樹(shù)遍歷與運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02
  • java實(shí)現(xiàn)英文翻譯程序

    java實(shí)現(xiàn)英文翻譯程序

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)英文翻譯程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Java concurrency之AtomicLongArray原子類(lèi)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java concurrency之AtomicLongArray原子類(lèi)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Java concurrency之AtomicLongArray原子類(lèi)的相關(guān)知識(shí),感興趣的朋友參考下吧
    2017-06-06
  • java元注解@Inherited的使用詳解

    java元注解@Inherited的使用詳解

    這篇文章主要介紹了java元注解@Inherited的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 在java的Map集合中,如何更改value的值

    在java的Map集合中,如何更改value的值

    這篇文章主要介紹了在java的Map集合中,如何更改value的值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java如何獲取對(duì)象屬性及對(duì)應(yīng)值

    Java如何獲取對(duì)象屬性及對(duì)應(yīng)值

    這篇文章主要介紹了Java如何獲取對(duì)象屬性及對(duì)應(yīng)值,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 詳解RocketMQ 消費(fèi)端如何監(jiān)聽(tīng)消息

    詳解RocketMQ 消費(fèi)端如何監(jiān)聽(tīng)消息

    這篇文章主要為大家介紹了RocketMQ 消費(fèi)端如何監(jiān)聽(tīng)消息示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Java農(nóng)夫過(guò)河問(wèn)題的繼承與多態(tài)實(shí)現(xiàn)詳解

    Java農(nóng)夫過(guò)河問(wèn)題的繼承與多態(tài)實(shí)現(xiàn)詳解

    這篇文章主要介紹了Java農(nóng)夫過(guò)河問(wèn)題的繼承與多態(tài)實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Windows10安裝IDEA 2020.1.2的方法步驟

    Windows10安裝IDEA 2020.1.2的方法步驟

    這篇文章主要介紹了Windows10安裝IDEA 2020.1.2的方法步驟,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08

最新評(píng)論

射阳县| 兴隆县| 沭阳县| 仲巴县| 阳山县| 南部县| 锦州市| 楚雄市| 察隅县| 沈丘县| 永寿县| 资源县| 千阳县| 邮箱| 南宁市| 石林| 尚义县| 安乡县| 隆昌县| 合川市| 张家口市| 广昌县| 广平县| 海城市| 海伦市| 太仓市| 宁化县| 平阳县| 穆棱市| 阿拉善右旗| 平和县| 响水县| SHOW| 林甸县| 都安| 墨脱县| 安阳县| 鞍山市| 南投市| 麟游县| 荆州市|