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

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


核心作用:

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

  2. 隱式選擇優先級
    被標記為 @Primary 的 Bean 會被優先注入,無需額外使用 @Qualifier 指定名稱。


使用示例:

場景定義

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

public interface PaymentService {void pay();
}@Component
public class CreditCardService implements PaymentService {@Overridepublic void pay() { System.out.println("信用卡支付"); }
}@Component
public class AlipayService implements PaymentService {@Overridepublic 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

與其他注解的優先級:

  1. @Primary vs @Qualifier

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


常見使用場景:

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

配置方式:

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

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

總結:

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

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/85902.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85902.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85902.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

本地優先的狀態管理與工具選型策略

本地優先:合理把控狀態共享邊界 在 React 應用開發過程中,開發者容易陷入一個認知誤區——過度追求狀態的全局化。許多新手開發者在項目初期就急于引入 Redux、Zustand 或 Jotai 等狀態管理工具,將一些本應屬于組件內部的瑣碎狀態&#xff0…

OpenCV CUDA模塊圖像處理-----對圖像執行 均值漂移過程(Mean Shift Procedure)函數meanShiftProc()

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 執行一個均值漂移過程(mean-shift procedure),并將處理后的點的信息(它們的顏色和位置&#xff0…

硬件I2C和軟件I2C的區別

硬件I2C和軟件I2C的區別 一、硬件I2C 1、硬件IC的局限性及學習意義 盡管硬件IC外設在STM32等微控制器中提供了標準化的通信支持,但在實際應用中,其穩定性可能存在問題。例如,某些情況下外設會因事件檢測異常而進入死鎖狀態,僅能…

推薦12個wordpress企業網站模板

WordPress企業網站模板是一種專為企業網站設計的WordPress主題,旨在幫助企業創建專業、美觀且易于管理的網站。這些模板通常具備響應式設計、SEO優化、多語言支持等功能,能夠滿足不同行業和企業的需求。 WordPress企業網站模板的適用場景 企業官網&…

68道Hbase高頻題整理(附答案背誦版)

簡述什么是Hbase數據庫? Hbase是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統,它利用HBase技術在HDFS上提供了類似于Bigtable的能力。換句話說,Hbase是Apache Hadoop生態系統中的一部分,可以為大數據應用提供快速的隨機…

PyTorch——卷積操作(2)

二維矩陣 [[ ]] 這里面conv2d(N,C,H,W)里面的四個是 N就是batch size也就是輸入圖片的數量,C就是通道數這只是一個二維張量所以通道為1,H就是高,W就是寬,所以是1 1 5 5 卷積核 reshape 第一個參數是batch size樣本數量 第二個參數…

Linux之MySQL安裝篇

1.確保Yum環境是否能正常使用 使用yum環境進行軟件的安裝 yum -y install mysql-server mysql2.確保軟件包已正常完成安裝 3.設置防火墻和selinux配置 ## 關閉防火墻 systemctl stop firewalld## 修該selinux配置 vim /etc/selinux/config 將seliuxenforcing修改為sel…

Devops系列---python基礎篇二

1、列表 1.1 概念 格式: 名稱 [ “元素1”,“元素2”,…] #定義一個列表 computer ["主機","鍵盤","顯示器","鼠標"]類型方法用途查index(“元素”)查看元素索引位置count(“元素”)統計元素出現的次數reverse()倒序排…

LeetCode - 234. 回文鏈表

目錄 題目 快慢雙指針步驟 讀者可能的錯誤寫法 正確的寫法 題目 234. 回文鏈表 - 力扣(LeetCode) 快慢雙指針步驟 找到鏈表的中點(find_mid函數): 使用快慢指針,慢指針每次走一步,快指針…

UniApp 全生命周期鉤子詳解

👉 整理不易,如果本文對你有幫助,歡迎點個【贊 👍】【收藏 ?】【關注 🧡】 后續我們還將繼續分享實用的 UniApp 教程,比如: 文件上傳全局請求封裝狀態管理動態路由等… 📮 有任何…

探索NautilusTrader:下一代開源算法交易平臺的革命性突破

在金融科技的浪潮中,量化交易領域正經歷一場由開源技術驅動的變革。NautilusTrader(https://github.com/nautechsystems/nautilus_trader)作為一款高性能、生產級的算法交易平臺,正以其創新的設計理念和強大的技術架構重塑開發者的策略研發流程。 一、核心定位:打破回測與…

QT開發技術【ffmpeg + QAudioOutput】音樂播放器

一、 介紹 使用ffmpeg 4.2.2 在數字化浪潮席卷全球的當下,音視頻內容猶如璀璨繁星,點亮了人們的生活與工作。從短視頻平臺上令人捧腹的搞笑視頻,到在線課堂中知識淵博的專家授課,再到影視平臺上扣人心弦的高清大片,音…

[論文閱讀] (38)基于大模型的威脅情報分析與知識圖譜構建論文總結(讀書筆記)

《娜璋帶你讀論文》系列主要是督促自己閱讀優秀論文及聽取學術講座,并分享給大家,希望您喜歡。由于作者的英文水平和學術能力不高,需要不斷提升,所以還請大家批評指正,非常歡迎大家給我留言評論,學術路上期…

python批量解析提取word內容到excel

# 基于Python實現Word文檔內容批量提取與Excel自動化存儲 ## 引言 在日常辦公場景中,常需要從大量Word文檔中提取結構化數據并整理到Excel表格中。傳統手動操作效率低下,本文介紹如何通過Python實現自動化批處理,使用python-docx和openpyxl…

win32相關(遠程線程和遠程線程注入)

遠程線程和遠程線程注入 CreateRemoteThread函數 作用:創建在另一個進程的虛擬地址空間中運行的線程 HANDLE CreateRemoteThread([in] HANDLE hProcess, // 需要在哪個進程中創建線程[in] LPSECURITY_ATTRIBUTES lpThreadAttributes, // 安全…

Flyway

Flyway 是一個強大的數據庫版本控制和遷移工具,主要用于管理數據庫結構的變更和演進。 核心作用 1. 數據庫版本控制 追蹤數據庫變更:記錄每次數據庫結構的修改版本管理:為每個變更分配版本號變更歷史:完整記錄數據庫演進過程 …

【深尚想】OPA855QDSGRQ1運算放大器IC德州儀器TI汽車級高速8GHz增益帶寬的全面解析

1. 元器件定義與核心特性 OPA855QDSGRQ1 是德州儀器(TI)推出的一款 汽車級高速運算放大器,專為寬帶跨阻放大(TIA)和電壓放大應用優化。核心特性包括: 超高速性能:增益帶寬積(GBWP&a…

機器學習實驗八--基于pca的人臉識別

基于pca的人臉識別 引言:pca1.pca是什么2.PCA算法的基本步驟 實例:人臉識別1.實驗目的2.實現步驟3.代碼實現4.實驗結果5.實驗總結 引言:pca 1.pca是什么 pca是一種統計方法,它可以通過正交變換將一組可能相關的變量轉換成一組線…

【LLIE專題】NTIRE 2025 低照度圖像增強第二名方案

Towards Scale-Aware Low-Light Enhancement via Structure-Guided Transformer Design(2025,NTIRE) 專題介紹一、研究背景二、SG-LLIE方法1.和Retinexformer方案對比2.總體方案及創新點3.詳細方案3.1 結構先驗提取3.2 網絡結構3.3 損失函數 …

泊松融合的介紹和OpenCV教程

泊松融合 Poisson Blending 簡介 核心思想 泊松融合的目標是在保留剪切圖像的梯度(紋理)信息的同時,使融合結果在邊界區域平滑過渡到目標圖像中。換句話說,它在融合區域中重建一個圖像,使其梯度盡可能接近源圖像的梯度,并且邊界貼合目標圖像。 數學描述 泊松融合將問題…