SpringBoot依賴注入Bean到Map實(shí)踐
一、現(xiàn)象介紹
Spring在項(xiàng)目啟動(dòng)初始化Map時(shí),如果Map是顯示的聲明需要注入,則, Spring會(huì)以Bean名稱作為key,value中類型Bean實(shí)例作為value。
將所有Bean容器中符合類型的實(shí)例都put到該Map中,返回Map。
前提是:Map的key是String類型的
二、源碼簡(jiǎn)析
源碼方法位置在org.springframework.beans.factory.support.DefaultListableBeanFactory
.doResolveDependency方法。

其中,在第1265行中,調(diào)用了resolveMultipleBeans方法:

進(jìn)入這個(gè)方法一看就明白了:

如果你仔細(xì)看的話,無論是普通的單類型注入還是這種集合Map等的注入,都會(huì)涉及到一個(gè)方法,
findAutowireCandidates,這個(gè)方法的作用就是查找匹配Spring容器中的所有同類型Bean實(shí)例。

三、實(shí)踐測(cè)試一下
首先準(zhǔn)備一個(gè)最簡(jiǎn)單的SpringBoot項(xiàng)目吧,只需要web依賴就行。

A和B兩個(gè)接口實(shí)現(xiàn)類


在瀏覽器輸入:http://localhost:8080/hello/AService
- A實(shí)現(xiàn)類調(diào)用

- B實(shí)現(xiàn)類調(diào)用

Map中斷點(diǎn):

四、有什么用
策略模式
舉一個(gè)簡(jiǎn)單的例子,我支付接口可以支持支付寶、微信、銀聯(lián),是不是只要各自實(shí)現(xiàn)支付接口即可,然后根據(jù)選擇的支付方式,調(diào)用不同的支付實(shí)現(xiàn)。后續(xù)要接入銀行卡、信用卡是不是很容易擴(kuò)展?
總結(jié)
關(guān)于設(shè)計(jì)模式之策略模式的相關(guān)詳細(xì)內(nèi)容,我們放到下節(jié)再來展開討論。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot使用@Valid 和AOP做參數(shù)校驗(yàn)及日志輸出問題
這篇文章主要介紹的Springboot使用@Valid 和AOP做參數(shù)校驗(yàn)及日志輸出問題,本文通過代碼講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11
MyBatis-Plus自定義SQL和復(fù)雜查詢的實(shí)現(xiàn)
MyBatis-Plus增強(qiáng)了MyBatis的功能,提供注解和XML兩種自定義SQL方式,支持復(fù)雜查詢?nèi)缍啾黻P(guān)聯(lián)、動(dòng)態(tài)分頁等,通過注解如@Select、@Insert、@Update、@Delete實(shí)現(xiàn)CRUD操作,本文就來介紹一下,感興趣的可以了解一下2024-10-10

