Spring容器中已經(jīng)存在的Bean替換示例
一、背景
我們在開發(fā)的過程中,經(jīng)常會引入別人寫的jar包實現(xiàn)某些功能。而別人的jar包一般都自動注入Spring容器中,假設(shè)別人都是通過@Bean或@Component注入的,并且沒有加入@ConditionalXXX等注解,導致自己無法替換掉別人的實現(xiàn),假設(shè)這個時候我就是想替換掉,那么該如何實現(xiàn)呢?
二、需求

由上圖可知,我們的需求為:
使用我們自己定義的 BananaProductService替換掉框架自帶的AppleProductService并加入到Spring容器中,同時保證全局只有一個ProductService的實現(xiàn)。
三、實現(xiàn)思路
我們在系統(tǒng)中根據(jù) @Bean或通過 @Component 定義的Bean對象在Spring中都會轉(zhuǎn)換成一個個的BeanDefinition對象,如果我們在Spring創(chuàng)建這些對象加入到Spring容器之前,將不想要的BeanDefinition對象刪除,而加入我們自己想要的BeanDefinition對象是不是就可以實現(xiàn)了?而Spring提供的BeanDefinitionRegistryPostProcessor接口正好可以幫助我們實現(xiàn)這個功能。
BeanDefinitionRegistryPostProcessor 是在系統(tǒng)加載完所有的BeanDefinition對象來進行回調(diào)。
四、實現(xiàn)步驟
1、模擬第三方j(luò)ar包實現(xiàn)并加入Spring容器中

2、自己提供一個實現(xiàn)

3、替換掉jar包默認的實現(xiàn)

4、進行測試

代碼地址
以上就是Spring容器中已經(jīng)存在的Bean替換示例的詳細內(nèi)容,更多關(guān)于Spring Bean容器替換的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
postman測試post請求參數(shù)為json類型的實例講解
下面小編就為大家分享一篇postman測試post請求參數(shù)為json類型的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03
java數(shù)據(jù)結(jié)構(gòu)排序算法之樹形選擇排序詳解
這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)排序算法之樹形選擇排序,結(jié)合具體實例形式分析了java樹形選擇排序的原理、實現(xiàn)技巧與相關(guān)注意事項,需要的朋友可以參考下2017-05-05
Java基礎(chǔ)知識之ByteArrayOutputStream流的使用
這篇文章主要介紹了Java基礎(chǔ)知識之ByteArrayOutputStream流的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
Java代碼的三根頂梁柱:循環(huán)結(jié)構(gòu)
這篇文章主要介紹了JAVA 循環(huán)結(jié)構(gòu)的相關(guān)資料,文中講解的非常細致,示例代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下2021-08-08

