策略模式實現 Bean 注入時怎么知道具體注入的是哪個 Bean?

@Autowire @Resource 的區別

1.來源不同:其中 @Autowire 是 Spring2.5 定義的注解,而 @Resource 是 Java 定義的注解

2.依賴查找的順序不同:

依賴注入的功能,是通過先在 Spring IoC 容器中查找對象,再將對象注入引入到當前類中。而查找又分為兩種方式:按名稱(byName)或按照類型(byType)查找,其中 @Autowire @Resource 都可以使用名稱查詢、類型查詢,但是區別在于二者進行查找的順序截然不同。
2.1 @Autowire

@Autowire 注解在查找要注入的 bean 時,首先會按照類型進行匹配,如果有多個匹配的 bean,就會按照名稱進行匹配。
具體來說,如果唄注入的屬性或構造函數參數的類型在容器中有且只有一個對應的 bean,那么 @Autowire 注解就會直接將該 bean 注入到該屬性或構造函數參數中。例如:

@Autowired
private UserService userService;

在這個例子中,如果容器中只有一個類型為 UserService 的 bean ,那么它就會被自動注入到userService 屬性中。
但是,如果容器中存在多個類型為 UserService 的 bean,就需要通過名稱進行匹配。此時,可以在 @Autowired 注解中使用 @Qualifier注解來指定要注入的bean的名稱,如果不使用 @Qualifier 注解就會使用屬性名。
例如:

@Autowired
@Qualifier("userService2")
private UserService userService;

在這個例子中,如果容器中有多個類型為 UserService 的 bean,那么它會根據 @Qualifier 注解中指定的名稱來匹配要注入的 bean。如果找到了名為 “userService2” 的 bean,就會將它注入到 userService 屬性中

這就是多個在實現有多個實現的 bean 注入的時候指定具體的 bean 的方式

2.2 @Resource注解

在Spring中,@Resource注解可以通過名稱或者類型來注入bean,具體取決于@Resource注解的兩個屬性:name和type。
如果@Resource注解中指定了name屬性,Spring將會根據該名稱來查找對應的bean,并將其注入到被注解的屬性或者方法參數中。例如:

@Resource(name = "myBean")
private MyBean myBean;

上述代碼將會根據名稱“myBean”來查找對應的bean,并將其注入到myBean屬性中。
如果@Resource注解沒有指定name屬性,而是指定了type屬性,Spring將會根據該類型來查找對應的bean,并將其注入到被注解的屬性或者方法參數中。例如:

@Resource(type = MyBean.class)
private MyBean myBean;

上述代碼將會根據類型MyBean來查找對應的bean,并將其注入到myBean屬性中。
如果@Resource注解既沒有指定name屬性,也沒有指定type屬性,那么它會默認按照名稱來查找對應的bean,并將其注入到被注解的屬性或者方法參數中。

3. 支持的參數不同:

@Autowired 和 @Resource 在使用時都可以設置參數,但二者支持的參數以及參數的個數完全不同,其中 @Autowired 只支持設置一個 required 的參數,而 @Resource 支持 7 個參數,支持的參數如下圖所示:
在這里插入圖片描述
在這里插入圖片描述

4. 依賴注入的用法支持不同

@Autowired 和 @Resource 支持依賴注入的用法不同,常見依賴注入有以下 3 種實現:
1.屬性注入
2.構造方法注入
3.Setter 注入
@Autowired 支持屬性注入、構造方法注入和 Setter 注入,而 @Resource 只支持屬性注入和 Setter 注入
?
小結:

在使用 Spring 框架要實現區分多個 bean 的注入時,可以使用 @Autowired 配合 @Qualifier(“bean的名字”) 的形式去實現注入不同的 bean

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

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

相關文章

Linux》》bash 、sh 執行腳本

通常使用shell去運行腳本,兩種方法 》bash xxx.sh 或 bash “xxx.sh” 、sh xxx.sh 或 sh “xxx.sh” 》bash -c “cmd string” 引號不能省略 我們知道 -c 的意思是 command,所以 bash -c 或 sh -c 后面應該跟一個 command。

【解析】ReentrantLock鎖、Syschronized鎖面試點解析

面試官提問 ● 公平鎖與非公平鎖的區別是什么? ● 什么是可重入鎖? ● 什么是死鎖,怎樣避免死鎖? ● ReentrantLock與Syschronized實現原理是什么?兩者有什么區別? ● 請說明ReentrantLock獲取鎖與釋放…

04.Python代碼NumPy-通過索引或切片來訪問和修改

04.Python代碼NumPy-通過索引或切片來訪問和修改 提示:幫幫志會陸續更新非常多的IT技術知識,希望分享的內容對您有用。本章分享的是Python基礎語法。前后每一小節的內容是存在的有:學習and理解的關聯性,希望對您有用~ python語法…

跨平臺數據采集如何解決不同平臺之間的數據兼容性問題?

在數字化時代,企業越來越依賴多個信息系統來管理業務,例如ERP(企業資源計劃)、CRM(客戶關系管理)、財務管理系統、電商平臺等。然而,在進行跨平臺數據采集時,不同系統之間的數據格式…

解決 vite.config.ts 引入scss 預處理報錯

目錄 報錯1:[plugin:vite:css] [SASS] Error:Cant find stylesheet to import 報錯2:[plugin:vite:css] [sass] Error: Undefined variable 版本號: "sass": "^1.86.3","sass-loader": "^1…

C++筆記,數學函數

參考鏈接&#xff1a;C中數學函數的使用方法_cpp里指數函數-CSDN博客 頭文件 <cmath> 1. 基本的算數運算函數 1.1 sqrt() - 計算平方根 功能&#xff1a;計算一個非負實數的平方根。原型&#xff1a;double sqrt(double x);示例代碼&#xff1a; #include <iostr…

不關“貓”如何改變外網IP?3種免重啟切換IP方案

每次更換外網IP都要重啟路由器&#xff1f;太麻煩了&#xff01;那么&#xff0c;不關貓怎么改變外網IP&#xff1f;無論是為了網絡調試、爬蟲需求&#xff0c;還是解決IP限制問題&#xff0c;頻繁重啟設備既耗時又影響效率。其實&#xff0c;更換外網IP并不一定要依賴“重啟大…

道路運輸安全員企業負責人考試內容與范圍

道路運輸企業主要負責人&#xff08;安全員&#xff09;考證要求 的詳細說明&#xff0c;適用于企業法定代表人、分管安全負責人等需取得的 《道路運輸企業主要負責人和安全生產管理人員安全考核合格證明》&#xff08;交通運輸部要求&#xff09;。 考試內容與范圍 1. 法律法…

深入剖析 WiFi 定位解析功能:原理、技術優勢與應用場景

WiFi 定位解析功能的原理? 信號強度與距離的關系? WiFi 定位的核心原理基于無線信號傳播過程中的一個基本特性&#xff1a;信號強度與信號發射源&#xff08;即 WiFi 接入點&#xff0c;Access Point&#xff0c;簡稱 AP&#xff09;和接收設備之間距離的關聯。一般來說&am…

NVIDIA RTX? GPU 低成本啟動零售 AI 場景開發

零售行業正在探索應用 AI 升級客戶體驗&#xff0c;同時優化內部流程。面對多重應用場景以及成本優化壓力&#xff0c;團隊可采用成本相對可控的方案&#xff0c;來應對多重場景的前期項目預演和落地&#xff0c;避免短期內大規模投入造成的資源浪費。 客戶體驗 AI 場景的研究…

首次打藍橋杯總結(c/c++B組)

目錄 一、對每個題進行總結 1.填空題 2.第一個大題---可分解的正整數&#xff08;10--3&#xff09; 3.第二道大題---產值調整&#xff08;10--3&#xff09; 4.第三道大題---畫展部署&#xff08;15--7&#xff09; 5.第四道大題---水質檢測&#xff08;15--3&#x…

林納斯·托瓦茲:Linux系統之父 Git創始人

名人說&#xff1a;路漫漫其修遠兮&#xff0c;吾將上下而求索。—— 屈原《離騷》 創作者&#xff1a;Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和編程的Coder&#x1f60a;&#xff09; 林納斯托瓦茲&#xff1a;Linux之父、Git創始人 一、傳奇人物的誕生 1. 早年生活與家…

C語言多進程素數計算

題目描述&#xff1a; 以下代碼實現了一個多進程素數計算程序&#xff0c;通過fork()函數創建子進程來并行計算指定范圍內的素數。請仔細閱讀代碼并回答以下問題。 #include "stdio.h" #include "unistd.h" #include <sys/types.h> #include "…

uniapp-商城-27-vuex 通用方法

1 概述 上節說了vuex 的基本使用方法,分析了基本的使用方法。 在使用中,常見使用,我們要針對狀態,購物車,不同類事務的管理,如果按照上節課的通用方法,那么使用和維護是會很大的難度的。 所以這里就必須要進行處理,借助 modules 進行定義不同類事務的處理手段。便于…

半導體設備通信標準—secsgem v0.3.0版本使用說明文檔(4)之HSMS(SEMI E37)

文章目錄 1、消息快1.1、選擇 請求1.2、選擇響應1.3、取消選擇請求1.4、取消選擇響應1.5、Linktest 請求1.6、Linktest 響應1.7、拒絕請求1.8、單獨請求1.9、數據消息 2、 協議2.1、 事件 SEMI E37 HSMS 定義主機和設備之間通過 TCP 協議的通信。 它指定用于啟動和終止連接的數…

通過GO后端項目實踐理解DDD架構

最近在工作過程中重構的項目要求使用DDD架構&#xff0c;在網上查詢資料發現教程五花八門&#xff0c;并且大部分內容都是長篇的概念講解&#xff0c;晦澀難懂&#xff0c;筆者看了一些github上入門的使用DDD的GO項目&#xff0c;并結合自己開發中的經驗&#xff0c;談談自己對…

Ubuntu系統連網問題

0. Preface 給一臺新電腦裝上Ubuntu系統后&#xff0c;接好網線&#xff0c;發現上不了網&#xff0c;右上角是有網絡連接的圖標的&#xff0c;也能獲取到ip地址&#xff0c;就是沒辦法連網&#xff0c;ping www.google.com也沒反應。 其實應該是網絡設置有點問題&#xff0c;…

C/C++---頭文件保護機制

在 C 和 C 編程里&#xff0c;頭文件保護機制是一種防止頭文件被重復包含的技術&#xff0c;它主要借助 #ifndef、#define 和 #endif 這些預處理指令來達成&#xff0c;也可以使用 #pragma once 這一編譯器特定指令。下面詳細闡述這一機制&#xff1a; 1. 頭文件重復包含的問題…

藍橋杯 8. 分巧克力

分巧克力 原題目鏈接 問題描述 兒童節那天有 K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友們。 小明一共有 N 塊巧克力&#xff0c;其中第 i 塊是 H? W? 的長方形。為了公平起見&#xff0c;小明需要從這 N 塊巧克力中切出 K 塊巧克力分給小朋友們。 要求…

從 SQL2API 到 Text2API:開啟數據應用開發的新征程

在技術革新浪潮的席卷下&#xff0c;數據應用開發領域正經歷著深刻變革。曾經&#xff0c;構建數據 API 需要開發者具備扎實的數據庫知識和編程技能&#xff0c;手動編寫復雜的 SQL 查詢與 API 代碼&#xff0c;這一過程不僅耗時費力&#xff0c;還將眾多非技術人員阻擋在數據應…