【springboot】介面多實現類,選擇性注入的4種解決方案
一、問題的描述
在實際的系統應用開發中我經常會遇到這樣的一類需求,相信大家在工作中也會經常遇到:
同一個系統在多個省份部署。
一個業務在北京是一種實現方式,是基於北京使用者的需求。
同樣的業務在上海是另外一種實現方式,與北京的實現方式大同小異
遇到這樣的需求,我們通常會定義一個業務實現的介面,比如:
public interface IDemoService {
public void doSomething();
}
1
2
3
在北京環境下這樣實現,比如:
@Component
public class DemoServiceBeijing implements IDemoService {
@Override
public void doSomething() {System.out.println("北京的業務實現");}
}
1
2
3
4
5
在上海環境下這樣實現,比如:
@Component
public class DemoServiceShanghai implements IDemoService {
@Override
public void doSomething() {System.out.println("上海的業務實現");}
}
1
2
3
4
5
然後我們寫一個模擬業務測試用例
@SpringBootTest
class DemoApplicationTests {
//這裡注入的demoService是DemoServiceShanghai,還是DemoServiceBeijing?
@Resource
IDemoService demoService;
@Test
void testDemoService() {
demoService.doSomething();
}
}
1
2
3
4
5
6
7
8
9
10
當我們執行這個測試用例的時候一定會報錯,因為Spring發現了兩個IDemoService的實現類。它不知道去例項化哪一個實現類,來作為IDemoService的實際業務處理bean。當然我們期望的狀態是:
在北京部署系統的時候,使用DemoServiceBeijing作為IDemoService的實現類完成依賴注入
在上海部署系統的時候,使用DemoServiceShanghai作為IDemoService的實現類完成依賴注入
二、相對低階解決方案
面對上面的需求,先說幾個相對低階的解決方案,這幾個方案雖然可以實現我們期望的狀態,但是對運維不夠友好。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010128/viewspace-2871535/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 選擇高可用性解決方案
- java中介面多個實現類,如何指定實現類,根據子類型別選擇實現方法Java型別
- 分享兩種實現Winform程式的多語言支援的解決方案ORM
- 介面冪等性解決方案
- 將input file的選擇的檔案清空的兩種解決方案
- HTML 單選按鈕實現 (性別選擇)(解讀)HTML
- 8 種方案解決重複提交問題!你選擇哪一種呀?
- 商品屬性的選擇功能的實現
- CSS多類選擇器CSS
- SVM實現多分類的三種方案
- 為什麼出現OPTIONS?SpringBoot介面跨域解決方案Spring Boot跨域
- 使用 CSS 選擇器實現對不含 title 屬性元素的選擇CSS
- 介面測試平臺-90: 全域性請求頭之 多介面-介面庫選擇
- 如何選擇HFM解決方案整合產品
- 一種Django多租戶解決方案Django
- 微服務分散式事務4種解決方案實戰微服務分散式
- JS實現單例模式的多種方案JS單例模式
- 關於AppDelegate瘦身的多種解決方案APP
- 高併發下的介面冪等性解決方案!
- 4種實現多列布局cssCSS
- Flutter 實現類似TabPicker省市區選擇Flutter
- css中span元素的width屬性無效果原因及多種解決方案CSS
- 什麼是冪等性?四種介面冪等性方案詳解!
- 眾多企業的共同選擇,華為雲網站安全解決方案有哪些優勢?網站
- 鐳速傳輸:4種提升檔案傳輸解決方案安全性的方法
- vue中selected預設選擇空白解決方案)Vue
- 選擇正確DevSecOps解決方案的七個技巧dev
- SAP S/4HANA: 一條程式碼線,許多種選擇
- 介面測試的解決方案
- Android的延遲實現的幾種解決方案以及原理分析Android
- delphi 判斷類是否實現介面,獲取類實現的介面
- 解決Hibernate session is closed的一種可行性方案Session
- 索尼攜多種影像解決方案出席 InfoComm
- 【分散式鎖的演化】常用鎖的種類以及解決方案分散式
- 移動端實現內滾動的4種方案
- css多類選擇器用法介紹CSS
- CSS3新增選擇器(屬性選擇器、結構偽類選擇器、偽元素選擇器)CSSS3
- 簡單瞭解下Spring中的各種Aware介面實現依賴注入Spring依賴注入