在学习MQ时我遇到了一个问题
@Configuration
public class RabbitMQConfig {
//声明推送的队列名
// private String simplename = "spring.lz.silple";
// private String workname = "spring.lz.work";/*** 创建一个队列对象,** @return*/
@Bean
public Queue Queue1() {return new Queue("com.lz.fanout1");
}
@Bean
public Queue Queue2() {return new Queue("com.lz.fanout2");
}
@Bean
public FanoutExchange exchange(){return new FanoutExchange("fanoutExchange");
}/*** 队列绑定交换机,也可在可视化工具中进行绑定.** @return*/
@Bean
public Binding bindingFanoutQueue1(Queue Queue2, FanoutExchange exchange) {return BindingBuilder.bind(Queue2).to(exchange);
}@Bean
public Binding bindingFanoutQueue2(Queue Queue1, FanoutExchange exchange) {return BindingBuilder.bind(Queue1).to(exchange);
}
}
问:为什么形式参数可以根据入参名称的不同而获取不同的BEAN。
答:@Bean
注解用于声明创建Bean对象的方法。方法名就是Bean的名称,而方法的返回类型就是Bean的类型。当其他组件需要依赖这些Bean对象时,可以通过方法的入参名称来指定要注入的Bean对象。
问:当其他组件需要依赖这些Bean对象时,可以通过方法的入参名称来指定要注入的Bean对象。这个之对于bean有效?在普通java是否生效呢?
答:在Spring中,如果存在多个类型相同的Bean对象时,Spring容器无法确定要注入哪个Bean对象。为了解决这个问题,Spring提供了根据入参名称来获取Bean对象的方式。这种方式只在Spring容器中生效,而在普通的Java代码中是不生效的。