В настоящее время я работаю над проектом внедрения rabbit-amqp и использую spring -rabbit для программной настройки всех моих очередей, привязок и обменов. (spring -rabbit-1.3.4 и spring -framework версии 3.2.0)
Объявление в классе javaconfiguration или xml-конфигурации является, по моему мнению, довольно статичным. Я знаю, как установить более динамическое значение (например, имя) для очереди, обмен или связывание следующим образом:
@Configuration
public class serverConfiguration {
private String queueName;
...
@Bean
public Queue buildQueue() {
Queue queue = new Queue(this.queueName, false, false, true, getQueueArguments());
buildRabbitAdmin().declareQueue(queue);
return queue;
}
...
}
Но мне было интересно, можно ли создать экземпляры экземпляра undefined Queue и зарегистрируйте их как beans как factory, регистрируя все его экземпляры.
Я не очень хорошо знаком с аннотацией Spring @Bean и ее ограничениями, но я пробовал
@Configuration
public class serverConfiguration {
private String queueName;
...
@Bean
@Scope("prototype")
public Queue buildQueue() {
Queue queue = new Queue(this.queueName, false, false, true, getQueueArguments());
buildRabbitAdmin().declareQueue(queue);
return queue;
}
...
}
И чтобы проверить, зарегистрированы ли несколько экземпляров очереди beans очереди, я вызываю:
Map<String, Queue> queueBeans = ((ListableBeanFactory) applicationContext).getBeansOfType(Queue.class);
Но это приведет только к отображению 1:
name of the method := the last created instance.
Можно ли динамически добавлять beans во время выполнения в SpringApplicationContext?