自动装配和重用“Spring-defined”属性

时间:2016-03-09 09:03:37

标签: java spring properties spring-boot spring-amqp

我有一个简单的问题,但我在文档或任何示例中都找不到任何相关内容。

我有一个使用RabbitMQ和Spring启动AMQP模块的Spring Boot项目。 我正在使用一个特定的交换,而Spring Jackson2JsonMessageConverter所以我需要定义我自己的RabbitTemplate bean,我猜(在这一点上,如果有人知道它是否可以用另一种更简单的方式完成,你欢迎)。

@Bean
RabbitTemplate myAwesomeTemplate() {
    RabbitTemplate rabbitTemplate = new RabbitTemplate();
    rabbitTemplate.setExchange(myBeautifulExchange);
    rabbitTemplate.setRoutingKey("legendary");
    rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter());
    rabbitTemplate.setConnectionFactory(connectionFactory());
    return rabbitTemplate;
}

这里真正的问题是我必须定义一个CachingConnectionFactory bean,只是为了将它设置为模板,但似乎CachingConnectionFactory已经被Spring {{1}定义了所以我想知道我是否可以在课堂上这样做:

RabbitAutoConfiguration

但是Intellij一直在抱怨,因为它找不到那个bean的定义,好像它是某个定义顺序或某事...... 当我以这种方式启动项目时,无论如何似乎都没问题,但是当Intellij抱怨时我不喜欢,这就像我在做“不是标准方式”的事情。

提前谢谢大家!很抱歉有很长的解释。

PS:同样的问题,如果我只想自动装配Spring @Autowired CachingConnectionFactory cachingConnectionFactory bean并使用主机,用户名和密码属性(分别为RabbitPropertiesspring.rabbitmq.hostspring.rabbitmq.username

1 个答案:

答案 0 :(得分:0)

  

但是Intellij一直在抱怨,因为找不到定义......   我不喜欢Intellij抱怨,这就像我做某事"不是标准的方式"。

您可以尝试通过将其添加到工厂方法并使用参数注入来欺骗它......

@Bean
RabbitTemplate myAwesomeTemplate(ConnectionFactory rabbitConnectionFactory) {
    ...
}

与属性相同。

无论哪种方式(@Autowired或此方式)都是#34;标准方式"。

如果它仍然抱怨,我建议你和JetBrains谈谈。