2017-03-14 29 views
1

是否可以强制执行两个@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的配置文件,我不想声明队列)。

+0

你所说的 “第一跑” 呢?为什么这是一个问题?在开始实例化bean之前,Spring首先创建所有类的所有bean定义。 –

+0

我在代码中看不到'AmqpAdmin':http://docs.spring.io/spring-amqp/reference/html/_reference.html#broker-configuration –

+0

Thanks @GaryRussell,您的评论让我想到了..我甚至开始创建一个反映这个问题的样本项目,当时它让我感到震惊。我有另一个'BindingConfiguration',它具有相同名称的bean(另一个'exchange()'''queue()'和'binding()')。当我解决重复名称时,一切正常...... 有趣的事实:取决于配置类名称从第一个配置或另一个配置中加载'queue()'bean。 –

回答

0

您可以尝试使用:

@Configuration 
@Import({ConsumerBindingConfiguration.class}) 
public class ConsumerConfiguration 
+0

它没有帮助。 –

相关问题