[英]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.