2016-03-28 8 views
6

私は、次のようなクラスを持っている: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; 
    } 

} 

それは春に可能です: 私は、次のようにこのクラスを作りたいですか?

+1

もちろんです。しかし、アプリケーション・コンテキスト内には、注入可能なBeanが1つしかありません。 –

+1

達成しようとしていることを詳しく説明できますか?私は、異なる戻り値の型と名前を持つ多くの@ Bean注釈付きメソッドがどのように問題になっているのか見ていません。理想的には、これらの@ Beanメソッドを別々の@Configurationクラスにグループ化するので、1つのGodクラスが全体の構成を保持することはありません。 @別の設定クラスをインポートして、@ Beanメソッドを再利用することができます。 – hovanessyan

+0

私はまったく同じ要件を持っています。私の場合は、まずファイルから設定データを読み込み、設定内の各エントリに対して、別のデータを持つ同じJavaタイプのすべてのBeanを作成する必要があります。したがって、@Beanアノテーションは設定から​​読み取らなければならないので、使用することはできません – Harish

答えて

2
@Configuration 
public class ApplicationConfiguration { 

    @Autowired 
    private ConfigurableBeanFactory beanFactory; 

    @PostConstruct 
    public void registerServices() { 
     beanFactory.registerSingleton("service...", new NNNService()); 
     ... 
    } 
} 
+2

ちょうど答えとしてコードをダンプすることを避けてください、そして、それが何をし、そしてなぜそれを説明しようとしてください。関連するコーディング経験を持っていない人にとっては、あなたのコードは明らかではないかもしれません。 – Frits

+0

'@ PostConstruct'は引数なしのメソッドが必要です。これは、Beanとプロパティを注入する必要がある場合に役に立ちません。 – Stewart

+0

'@ PostConstruct'は、Beanとプロパティが' @ Configuration'オブジェクトに注入された後に実行されます。 (彼の例では、彼は注入された豆工場を使用しています) – Ryan

関連する問題