欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

核心作用:

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

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

使用示例:

場景定義

假設有一個支付接口 PaymentService 和兩個實現類:

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

標記其中一個實現類為默認首選:

@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 都被標記為 @Primary,Spring 會再次拋出歧義異常。

常見使用場景:

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

配置方式:

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

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

總結:

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

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

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

相關文章

  • Java拷貝文件夾和刪除文件夾代碼實例

    Java拷貝文件夾和刪除文件夾代碼實例

    這篇文章主要介紹了Java拷貝文件夾和刪除文件夾代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • Java?ArrayList集合之解鎖數據存儲新姿勢

    Java?ArrayList集合之解鎖數據存儲新姿勢

    這篇文章主要介紹了Java?ArrayList集合之解鎖數據存儲新姿勢,ArrayList是一個動態(tài)數組,可以自動調整大小,并提供了豐富的操作方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-03-03
  • java實現PPT轉PDF出現中文亂碼問題的解決方法

    java實現PPT轉PDF出現中文亂碼問題的解決方法

    這篇文章主要為大家詳細介紹了java實現PPT轉PDF出現中文亂碼問題的解決方法,進行了詳細的問題分析,需要的朋友可以參考下
    2015-11-11
  • Maven中的庫repository詳解

    Maven中的庫repository詳解

    Maven中要配置庫,可以有多種方式,最直接的是在項目中的pom.xml文件中,通過<repositories>配置庫,這樣配置的庫僅適用于當前項目,這篇文章主要介紹了Maven中的庫(repository),需要的朋友可以參考下
    2024-01-01
  • java生成XML的方法【附demo源碼下載】

    java生成XML的方法【附demo源碼下載】

    這篇文章主要介紹了java生成XML的方法,涉及java針對xml格式文件的簡單操作技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下
    2016-12-12
  • 基于SpringMVC中的路徑參數和URL參數實例

    基于SpringMVC中的路徑參數和URL參數實例

    這篇文章主要介紹了基于SpringMVC中的路徑參數和URL參數實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • java 實現黃金分割數的示例詳解

    java 實現黃金分割數的示例詳解

    這篇文章主要介紹了java 實現黃金分割數的示例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • java正則表達式精確查找和替換指定字符代碼示例

    java正則表達式精確查找和替換指定字符代碼示例

    這篇文章主要給大家介紹了關于java正則表達式精確查找和替換指定字符的相關資料,java正則表達式是一種用于匹配、查找和替換文本的強大工具,它可以用于驗證輸入是否符合特定的格式、從文本中提取信息、以及將文本中的某些內容替換成其他內容,需要的朋友可以參考下
    2024-04-04
  • java怎么創(chuàng)建目錄(刪除/修改/復制目錄及文件)代碼實例

    java怎么創(chuàng)建目錄(刪除/修改/復制目錄及文件)代碼實例

    這篇文章主要介紹了java怎么創(chuàng)建目錄,還包括刪除/修改/復制目錄及文件,代碼簡單,下面直接看代碼吧
    2013-12-12
  • 關于SpringBoot中事務失效的幾種情況

    關于SpringBoot中事務失效的幾種情況

    這篇文章主要介紹了關于SpringBoot中事務失效的幾種情況,Spring AOP默認使用動態(tài)代理,會給被代理的類生成一個代理類,事務相關的操作都通過代理來完成,使用內部方法調用時,使用的是實例調用,沒有通過代理類調用方法,因此事務不會檢測到失敗,需要的朋友可以參考下
    2023-08-08

最新評論