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

Spring中@Primary注解的作用與使用

 更新時間:2025年06月06日 09:10:10   作者:長勺  
本文主要介紹了Spring中@Primary注解的作用與使用,@Primary?注解用于解決依賴注入時的歧義性問題,具有一定的參考價值,感興趣的可以了解一下

在 Spring 框架中,@Primary 注解用于解決依賴注入時的歧義性(Ambiguity)問題。當(dāng) Spring 容器中存在多個相同類型的 Bean 時,通過 @Primary 標(biāo)記其中一個 Bean 作為默認的首選注入對象。

核心作用:

  • 解決多個同類型 Bean 的沖突當(dāng)有多個實現(xiàn)同一接口或相同類型的 Bean 時,Spring 無法自動確定注入哪個 Bean,會拋出 NoUniqueBeanDefinitionException。使用 @Primary 可指定默認注入的 Bean。

  • 隱式選擇優(yōu)先級被標(biāo)記為 @Primary 的 Bean 會被優(yōu)先注入,無需額外使用 @Qualifier 指定名稱。

使用示例:

場景定義

假設(shè)有一個支付接口 PaymentService 和兩個實現(xiàn)類:

public interface PaymentService {
    void pay();
}

@Component
public class CreditCardService implements PaymentService {
    @Override
    public void pay() { System.out.println("信用卡支付"); }
}

@Component
public class AlipayService implements PaymentService {
    @Override
    public void pay() { System.out.println("支付寶支付"); }
}

問題:依賴注入歧義

若直接注入 PaymentService,Spring 會報錯:

@Autowired
private PaymentService paymentService; // 拋出 NoUniqueBeanDefinitionException

解決方案:使用 @Primary

標(biāo)記其中一個實現(xiàn)類為默認首選:

@Component
@Primary // 指定為默認注入的 Bean
public class AlipayService implements PaymentService { ... }

此時注入會成功選擇 AlipayService

@Autowired
private PaymentService paymentService; // 隱式注入 AlipayService

與其他注解的優(yōu)先級:

  • @Primary vs @Qualifier

    • @Qualifier 顯式指定 Bean 名稱的優(yōu)先級高于 @Primary。
    • 例如:@Autowired @Qualifier("creditCardService") 會覆蓋 @Primary
  • 多個 @Primary 的沖突如果多個同類型 Bean 都被標(biāo)記為 @Primary,Spring 會再次拋出歧義異常。

常見使用場景:

  • 數(shù)據(jù)庫多數(shù)據(jù)源配置在多個 DataSource Bean 中,標(biāo)記默認使用的數(shù)據(jù)源。
  • 不同環(huán)境下的實現(xiàn)類例如在測試和生產(chǎn)環(huán)境中提供同一接口的不同實現(xiàn),通過 @Primary 切換默認實現(xiàn)。
  • 第三方庫的擴展當(dāng)覆蓋第三方庫提供的 Bean 時,將自己的實現(xiàn)標(biāo)記為 @Primary

配置方式:

除了注解在類上,也可以在 @Bean 方法中使用:

@Configuration
public class AppConfig {
    @Bean
    @Primary // 標(biāo)記此 Bean 為首選
    public PaymentService alipayService() {
        return new AlipayService();
    }
}

總結(jié):

場景解決方案
多個同類型 Bean,需默認注入一個在目標(biāo) Bean 添加 @Primary
需要臨時覆蓋默認注入配合 @Qualifier 指定名稱

關(guān)鍵點:@Primary 是 Spring 解決依賴注入歧義性的輕量級方案,通過隱式指定默認 Bean 簡化配置,但在需要精確控制的場景中仍需結(jié)合 @Qualifier 使用。

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

相關(guān)文章

  • Java課設(shè)案例之百行代碼實現(xiàn)簡易計算器

    Java課設(shè)案例之百行代碼實現(xiàn)簡易計算器

    下面這篇文章主要給大家介紹了關(guān)于Java課設(shè)案例之百行代碼實現(xiàn)簡易計算器的相關(guān)資料,這是一個關(guān)于java簡單計算器的完整課程設(shè)計以及源碼,需要的朋友可以參考下
    2023-06-06
  • java模擬post請求登錄貓撲示例分享

    java模擬post請求登錄貓撲示例分享

    這篇文章主要介紹了java模擬post請求登錄貓撲的小示例,需要的朋友可以參考下
    2014-02-02
  • maven搭建java ee項目圖文教程

    maven搭建java ee項目圖文教程

    這篇文章主要為大家詳細介紹了maven搭建java ee項目圖文教程,感興趣的小伙伴們可以參考一下
    2016-04-04
  • 如何基于ThreadPoolExecutor創(chuàng)建線程池并操作

    如何基于ThreadPoolExecutor創(chuàng)建線程池并操作

    這篇文章主要介紹了如何基于ThreadPoolExecutor創(chuàng)建線程池并操作,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • 把Java程序轉(zhuǎn)換成exe,可直接運行的實現(xiàn)

    把Java程序轉(zhuǎn)換成exe,可直接運行的實現(xiàn)

    這篇文章主要介紹了把Java程序轉(zhuǎn)換成exe,可直接運行的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 以實例簡介Java中線程池的工作特點

    以實例簡介Java中線程池的工作特點

    這篇文章主要介紹了以實例簡介Java中線程池的工作特點,線程池是Java實現(xiàn)多線程編程的基礎(chǔ),需要的朋友可以參考下
    2015-09-09
  • Java中6種單例模式寫法代碼實例

    Java中6種單例模式寫法代碼實例

    這篇文章主要介紹了Java中6種單例模式寫法代碼實例,某個類任何情況下只有一個實例,并提供一個全局訪問點來獲取該實例,Java6種單例模式有2種懶漢式,2種餓漢式,靜態(tài)內(nèi)部類 ,枚舉類,需要的朋友可以參考下
    2024-01-01
  • Java統(tǒng)計英文句子中出現(xiàn)次數(shù)最多的單詞并計算出現(xiàn)次數(shù)的方法

    Java統(tǒng)計英文句子中出現(xiàn)次數(shù)最多的單詞并計算出現(xiàn)次數(shù)的方法

    這篇文章主要介紹了Java統(tǒng)計英文句子中出現(xiàn)次數(shù)最多的單詞并計算出現(xiàn)次數(shù)的方法,涉及java針對英文句子的字符串遍歷、轉(zhuǎn)換、正則替換、計算等相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • spring?Bean創(chuàng)建的完整過程記錄

    spring?Bean創(chuàng)建的完整過程記錄

    這篇文章主要給大家介紹了關(guān)于Spring中Bean實例創(chuàng)建的相關(guān)資料,文中通過實例代碼和圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-01-01
  • 使用SpringBoot整合Jpa的過程詳解

    使用SpringBoot整合Jpa的過程詳解

    SpringBoot是一種快速開發(fā)框架,它簡化了Java應(yīng)用程序的開發(fā)過程,而Jpa是Java持久化規(guī)范的一種實現(xiàn),將SpringBoot與Jpa整合可以更加方便地進行數(shù)據(jù)庫操作,提高開發(fā)效率,本文將介紹如何使用Spring Boot整合Jpa,幫助讀者快速上手并應(yīng)用于實際項目中
    2023-12-12

最新評論

武山县| 太湖县| 岢岚县| 渝北区| 金乡县| 宝山区| 郴州市| 宣城市| 平邑县| 图木舒克市| 汶上县| 屏东市| 若羌县| 赣州市| 洪江市| 禄丰县| 楚雄市| 安平县| 连南| 赫章县| 兴安县| 织金县| 弥勒县| 肥乡县| 潮州市| 湘阴县| 芦山县| 龙南县| 哈密市| 麻江县| 小金县| 福泉市| 古交市| 类乌齐县| 大港区| 尤溪县| 九龙县| 台安县| 镇安县| 海宁市| 木里|