2016-10-26 15 views
1

私は春ウサギを使用しての春(ブート)アプリケーションを持っている、などのように、必要に応じて、私はバインディングBeanを作成:Spring(Boot)アプリケーションでBeanをコードに動的に追加するにはどうすればよいですか?

 
import org.springframework.amqp.core.*; 
import org.springframework.beans.factory.annotation.Value; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 

@Configuration 
public class QueueBindings { 

    // first binding 

    @Bean 
    public Queue firstQueue(@Value("${rabbitmq.first.queue}") String queueName) { 
     return new Queue(queueName); 
    } 

    @Bean 
    public FanoutExchange firstExchange(@Value("${rabbitmq.first.exchange}") String exchangeName) { 
     return new FanoutExchange(exchangeName); 
    } 

    @Bean 
    public Binding firstBinding(Queue firstQueue, FanoutExchange firstExchange) { 
     return BindingBuilder.bind(firstQueue).to(firstExchange); 
    } 

    // second binding 

    @Bean 
    public Queue secondQueue(@Value("${rabbitmq.second.queue}") String queueName) { 
     return new Queue(queueName); 
    } 

    @Bean 
    public FanoutExchange secondExchange(@Value("${rabbitmq.second.exchange}") String exchangeName) { 
     return new FanoutExchange(exchangeName); 
    } 

    @Bean 
    public Binding secondBinding(Queue secondQueue, FanoutExchange secondExchange) { 
     return BindingBuilder.bind(secondQueue).to(secondExchange); 
    } 

} 

私が持っている問題は3つの豆あたりの情報の2つだけの部分があるということです、キュー名、および交換名。

@Beanメソッドの束をコピー&ペーストするのではなく、任意の数のBeanをコンテキストに追加する方法はありますか?私はこのリスト内の各名前に対して、この3つのBeanをこの接続で追加するようなものが必要です。

答えて

0

プログラムで任意の数のBeanを登録するには、下位レベルのAPIにドロップダウンする必要があります。構成クラスで@Importを使用すると、ImportBeanDefinitionRegistrarの実装を参照できます。レジストラのregisterBeanDefinitionsメソッドでは、すべてのBeanのBean定義を登録します。

ImportBeanDefinitionRegistrarは、登録するBeanを外部で設定できるようにする場合は、EnvironmentAwareにすることができます。これにより、Environmentを注入して、そのプロパティを使用してレジストラが登録するBeanをカスタマイズできるようになります。

+0

私はついにこのアプローチを試してみました。私が取り組んでいる問題は、「環境」はマップのようなプロパティを扱うことができないということです。あなたは知られている物件を求めることができますが、この物件の下のすべての値を点線のパスとして扱うことはできません。 Spring Bootはマップにマップする機能を持っていますが、レジストラ内から他のBeanにアクセスする方法はわかりません。 –

関連する問題