簡體   English   中英

Spring配置文件中的動態依賴項注入

[英]Dynamic dependency injection in spring configuration file

我需要知道如何在spring配置文件中動態注入依賴項。 例如,我有一個稱為“ Class A”的業務邏輯類。 在該類內部,它處理稱為“ doSomething()”的方法。 根據應用程序,此方法可以以兩種不同的方式執行(同一方法的兩種類型的實現)。 因此,我已使用此方法聲明了一個名為“ Manager”的接口,並為同一接口創建了兩個實現類。 讓我們將它們稱為“ Impl1”和“ Impl2”,它們實現了接口“ Manager”。

Interface Manager{
 void doSomething();
}

Class Impl1 implements Manager{ 

 public void doSomething(){
  //doIt like this way
 }

 Class Impl2 implements Manager{ 

 public void doSomething(){
  //doIt like that way
 }
}

A類具有對稱為“ manager”的“ Manager”界面的引用,該界面將在部署時通過Spring DI進行設置。 該注入可以是Impl1對象或Impl2對象。 它將由最終用戶決定。 因此,我必須為最終用戶提供兩個選項,使他或她可以決定用哪種方式來處理此“ doSomething()”方法,並根據他或她的選擇,我將注入相關的實現類(Impl1或Impl2 )。

Class A{ 

 private Manager manager; //this can be either Impl1 or Impl2

 public void setManager(Manager manager){
  this.manager = manager;
 }

 public void performLogic(){
  manager.doSomething();
 }
}

最終用戶只有一次機會做出選擇,並且該應用程序將永遠使用該實現,除非用戶希望再次安裝該應用程序的新副本。 我如何根據用戶在spring xml文件中的選擇動態注入相關的實現。解決這種情況的最佳方法是什么? 歡迎提出想法。

提前謝謝大家!

您需要使用Spring配置文件

使用兩個配置文件,將每個實現包裝到其中一個。 然后在啟動時激活配置文件之一(例如,使用系統屬性)。

您如何看待以下情況:

Class A{ 

 @Autowired 
 @Qualifier("Impl1")
 private Manager manager1; // Impl1

 @Autowired 
 @Qualifier("Impl1")
 private Manager manager2; // Impl2

 // getter setter for manager1 and manager2

 public void performLogic(){
  getUserChoiceManager().doSomething();
 }

 private Manager getUserChoiceManager() {
   // return manager according to user choice
 }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM