是否可以强制执行两个@Configuration
类的排序?Spring @ @ Configuration`类的排序
案例我是在(ConsumerConfiguration
)配置类中的一个,我宣布SimpleMessageListenerContainer
的@Bean
:
@Bean
public SimpleMessageListenerContainer container(ConnectionFactory connectionFactory) {
SimpleMessageListenerContainer container =
new SimpleMessageListenerContainer(connectionFactory);
container.setQueueNames("queue");
return container;
}
这是应该听queue
。 (这是Spring Integration + AMQP项目的一部分)
我的假设是,所有Rabbit组件都将事先创建,我通常不想用Java声明它们。然而,对于dev
轮廓我想应用程序来创建它们对我来说,因此另一个@Configuration
类:
@Configuration
@RequiredArgsConstructor
@Profile("dev")
public class ConsumerBindingConfiguration {
@Bean
public Exchange exchange() {
return ExchangeBuilder.topicExchange("exchange")
.durable()
.build();
}
@Bean
Queue queue() {
return QueueBuilder.durable("queue")
.build();
}
@Bean
Binding binding() {
return BindingBuilder.bind(queue())
.to(exchange())
.with("key")
.noargs();
}
}
不幸的是,当我运行应用程序时,ConsumerConfiguration
类被首先运行。看来@Order
注释对@Configuration
类不起作用。我看到了@DependsOn
注释,但我不能在我的情况下使用它(对于任何不同于dev
的配置文件,我不想声明队列)。
你所说的 “第一跑” 呢?为什么这是一个问题?在开始实例化bean之前,Spring首先创建所有类的所有bean定义。 –
我在代码中看不到'AmqpAdmin':http://docs.spring.io/spring-amqp/reference/html/_reference.html#broker-configuration –
Thanks @GaryRussell,您的评论让我想到了..我甚至开始创建一个反映这个问题的样本项目,当时它让我感到震惊。我有另一个'BindingConfiguration',它具有相同名称的bean(另一个'exchange()'''queue()'和'binding()')。当我解决重复名称时,一切正常...... 有趣的事实:取决于配置类名称从第一个配置或另一个配置中加载'queue()'bean。 –