gpt4 book ai didi

java - 我们需要为 Spring Boot 中的所有内置类创建 bean 吗?

转载 作者:行者123 更新时间:2023-12-02 00:59:00 25 4
gpt4 key购买 nike

我正在尝试使用 Spring Boot 配置 RabbitMQ。下面是我的配置类的快照。

案例1:

   @Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
RabbitTemplate template = new RabbitTemplate(connectionFactory);
template.setMessageConverter(new Jackson2JsonMessageConverter());
return template;
}

这段代码工作正常。

代码2:

       @Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, MessageConverter messageConverter) {
RabbitTemplate template = new RabbitTemplate(connectionFactory);
// template.setMessageConverter(new Jackson2JsonMessageConverter()); // Line 1 - works
// template.setMessageConverter(messageConverter); // Line 2 - error: asks to inject Bean
return template;
}

但是,在这种情况下,如果我使用第 1 行(我在其中创建 Jackson2JsonMessageConverter 对象),则代码可以正常工作。

但是我编写这段代码是为了了解现有代码的工作原理,其中使用的是第 2 行,而不是第 1 行。因此,当我使用第 2 行而不是第 1 行时,我收到错误:

考虑在您的配置中定义“org.springframework.amqp.support.converter.MessageConverter”类型的 bean。

所以我有两个问题:

  1. 为什么会出现此错误?
  2. 如果我为 MessageConverter 定义一个 bean,比如说

    @ bean 公共(public)消息转换器 createMessageConverter() { 返回新的 Jackson2JsonMessageConverter();}

然后就可以了。那么为什么它不要求我为 ConnectionFactory 参数定义一个 bean 呢?

PS:这里没有使用@Autowired,我试图理解的代码中也没有使用@Autowired,并且两个参数 ConnectionFactory 和 MessageConverter 都是接口(interface)而不是类

最佳答案

简短的回答是:您需要了解 Spring Boot 中 AutoConfiguratrions 的概念,它将为您创建大量 @Bean,而您却“看不到它们”。

了解自动配置的一篇非常好的文章是:

https://www.marcobehler.com/guides/spring-boot

就您而言,您可能还想查看 Spring Boot 源代码中的“RabbitAutoConfiguration”类。

关于java - 我们需要为 Spring Boot 中的所有内置类创建 bean 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60946864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com