没有显式调用 这些 @Bean 方法,但 Spring Boot 在启动时会自动调用它们 ,并注册到 Spring 容器中。这是 Spring 的 自动配置机制 和 Bean 生命周期管理 的核心特性。
✅ 关键点:Spring 的 IoC 容器自动管理 Bean
1. @Configuration 注解
java
@Configuration
public class FanoutConfig {
- 告诉 Spring:这是一个配置类 ,里面定义的
@Bean方法会被 Spring 容器管理。
2. @Bean 注解
java
@Bean
public Queue fanoutQueue1() {
return new Queue("fanout.queue1");
}
- 每个
@Bean方法返回的对象(如Queue、FanoutExchange、Binding)都会被 Spring 自动注册为 Bean。 - 你不需要手动调用这些方法,Spring 会在启动时自动执行它们。
3. RabbitMQ 的自动声明机制
Spring AMQP 提供了 RabbitAdmin,它会在 Spring 容器启动时:
- 扫描所有类型为
Queue、Exchange、Binding的 Bean; - 自动调用 RabbitMQ 的 API 去创建它们(如果它们不存在)。
🔍 举个例子:Spring 启动时发生了什么?
| 步骤 | 发生了什么 |
|---|---|
| 1 | Spring Boot 启动 |
| 2 | 扫描到 @Configuration 类 FanoutConfig |
| 3 | 执行所有 @Bean 方法,创建 Queue、FanoutExchange、Binding 实例 |
| 4 | RabbitAdmin 自动将这些声明发送到 RabbitMQ 服务器 |
| 5 | RabbitMQ 中就会创建出 hmall.fanout 交换机和两个队列 |
✅ 总结一句话:
你不需要手动调用这些方法,Spring 会自动执行它们,并通过 RabbitAdmin 把队列和交换机声明到 RabbitMQ 中。