我有一種類型的可以提供數據和註冊表的不同數據提供者註冊的類。我正在尋找一種優雅的方式來實現這一點在春季啓動。 我當前的實現看起來像這樣(代碼縮短爲簡潔起見):獲取特定類型的豆列表
public interface DataProvider{
Data getSomeData();
}
public class Registry{
public register(DataProvider provider){
//add to internal list
};
public List<DataProvider> getProviders(){
//return providers
}
public Data someAggregatedOperation(){ ... }
}
public class Provider1 implements DataProvider { ... }
public class Provider2 implements DataProvider { ... }
現在的佈線部分,這就是我想改變的東西更優雅的部分:
@Configuration
public class MyAppConfiguration{
@Bean
public Registry providerRegistry(){
Registry reg = new Registry();
reg.register(new Provider1());
reg.register(new Provider2());
return reg;
}
}
然後我可以將註冊表注入其他需要使用這些服務的類中。
我知道DI是爲單一類型提供不同的實現,但一次只能提供一種類型。所以DI最可能不是正確的工具,我的問題更多的是關於春天,如果有一個我不知道實現這個目標的好方法。 作爲示例使用限定符對它們進行註釋,然後在註冊表中使用該限定符解析所有Beans。
我不想採取的方式是使用自定義註釋,然後通過反射解析所有類,實例化它們並將它們放入註冊表中。但目前,這是我能看到的唯一方法,所以我不必修改配置並手動傳送這些服務。
定義什麼是「優雅」對你意味着什麼?還有其他一些方法可以做到這一點,但我不知道優雅的解決方案對您意味着什麼。你希望自動註冊所有的提供商還是想要控制它? –