Spring容器中已經(jīng)存在的Bean替換示例
一、背景
我們在開發(fā)的過程中,經(jīng)常會引入別人寫的jar包實現(xiàn)某些功能。而別人的jar包一般都自動注入Spring容器中,假設(shè)別人都是通過@Bean
或@Component
注入的,并且沒有加入@ConditionalXXX
等注解,導(dǎo)致自己無法替換掉別人的實現(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)文章
完美解決Logback configuration error detected的問題
這篇文章主要介紹了完美解決Logback configuration error detected的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08深度解析Java中的國際化底層類ResourceBundle
做項目應(yīng)該都會實現(xiàn)國際化,那么大家知道Java底層是如何實現(xiàn)國際化的嗎?這篇文章就來和大家深度解析一下Java中的國際化底層類ResourceBundle,希望對大家有所幫助2023-03-03SpringBoot整合Swagger3生成接口文檔過程解析
這篇文章主要介紹了SpringBoot整合Swagger3生成接口文檔過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-07-07基于Log4j2阻塞業(yè)務(wù)線程引發(fā)的思考
這篇文章主要介紹了基于Log4j2阻塞業(yè)務(wù)線程引發(fā)的思考,基于很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12