【问题标题】:Autowire and reuse "Spring-defined" properties自动装配和重用“弹簧定义的”属性
【发布时间】:2016-03-09 09:03:36
【问题描述】:

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

我有一个使用 RabbitMQ 和 Spring Boot 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 RabbitAutoConfiguration 类定义,所以我想知道我是否可以在课堂上简单地做到这一点:

@Autowired
CachingConnectionFactory cachingConnectionFactory

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

提前谢谢大家!抱歉解释太长了。

PS:如果我只想自动装配 Spring RabbitProperties bean 并使用主机、用户名和密码属性(分别为 spring.rabbitmq.hostspring.rabbitmq.usernamespring.rabbitmq.password),也会出现同样的问题。

【问题讨论】:

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


    【解决方案1】:

    但是 Intellij 一直在抱怨,因为它找不到定义...... 我不喜欢 Intellij 抱怨,就好像我在做一些“非标准方式”的事情。

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

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

    属性也一样。

    任何一种方式(@Autowired 或这种方式)都是“标准方式”。

    如果它仍然抱怨,我建议你与 JetBrains 联系。

    【讨论】:

    • 所以你认为它应该这样工作?我已经尝试将它注入到 bean 工厂方法中,但是......同样的问题,Intellij 在方法参数上以同样的方式抱怨......
    • 这就是框架的设计使用方式;我不能说 IntelliJ 对它的支持。对不起。
    • 没问题!谢谢你的解释。至少我现在知道我在这里没有做错什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 2013-10-29
    • 2014-07-08
    • 2016-09-27
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    相关资源
    最近更新 更多