私は、次のようなクラスを持っている:Springでsingle @ Bean-annotatedメソッド(またはそれに類似したメソッド)を使用して複数のBeanを登録する方法は?
@Configuration
public class ApplicationConfiguration {
private <T> T createService(Class<T> serviceInterface) {
// implementation omitted
}
@Bean
public FooService fooService() {
return createService(FooService.class);
}
@Bean
public BarService barService() {
return createService(BarService.class);
}
...
}
問題は、あまりにも多くのcrateService
メソッド呼び出しの種類と引数を返し、自分の名前のみが異なるビーン注釈付きメソッド@があるということです。
@Configuration
public class ApplicationConfiguration {
private static final Class<?>[] SERVICE_INTERFACES = {
FooSerivce.class, BarService.class, ...};
private <T> T createService(Class<T> serviceInterface) {
// implementation omitted
}
@Beans // whatever
public Map<String, Object> serviceBeans() {
Map<String, Object> result = ...
for (Class<?> serviceInterface : SERVICE_INTERFACES) {
result.put(/* calculated bean name */,
createService(serviceInterface));
}
return result;
}
}
それは春に可能です: 私は、次のようにこのクラスを作りたいですか?
もちろんです。しかし、アプリケーション・コンテキスト内には、注入可能なBeanが1つしかありません。 –
達成しようとしていることを詳しく説明できますか?私は、異なる戻り値の型と名前を持つ多くの@ Bean注釈付きメソッドがどのように問題になっているのか見ていません。理想的には、これらの@ Beanメソッドを別々の@Configurationクラスにグループ化するので、1つのGodクラスが全体の構成を保持することはありません。 @別の設定クラスをインポートして、@ Beanメソッドを再利用することができます。 – hovanessyan
私はまったく同じ要件を持っています。私の場合は、まずファイルから設定データを読み込み、設定内の各エントリに対して、別のデータを持つ同じJavaタイプのすべてのBeanを作成する必要があります。したがって、@Beanアノテーションは設定から読み取らなければならないので、使用することはできません – Harish