java - 春天不创造豆
问题描述
我有两个实现相同接口的 bean。两者都是在 Java 配置中创建的,如下所示:
@Bean
@Qualifier("kafkaEventSender")
public IKafkaEventSender<KafkaData> kafkaEventSender(@Qualifier("EventBus") KafkaTemplate<String, Object> kafkaTemplate){
return new KafkaEventSender<>(kafkaTemplate, false);
}
@Bean
@Qualifier("kafkaEventSenderAudited")
public IKafkaEventSender<KafkaData> kafkaEventSenderAudited(@Qualifier("EventBus") KafkaTemplate<String, Object> kafkaTemplate){
return new KafkaEventSenderAudited<>(kafkaTemplate, false);
}
问题是spring不会只创建第二个bean。知道为什么吗?
解决方案
@Qualifier 注解用于在 Spring 容器中从多个相同类型的可用 bean 中选择一个 bean。
当您使用 @Bean 注解对方法进行注解时,默认情况下,它会创建一个名称为同一方法名称的 bean。因此,例如:
@Bean
public BeanA itsBeanA() {
return new BeanA();
}
@Bean(name = "specialBeanA")
public BeanA itsAgainBeanA() {
return new BeanA("specialConstructorParam");
}
@Bean
public BeanB beanB(@Autowired @Qualifier("specialBeanA") BeanA beanA) {
return new BeanB(beanA);
}
第一个方法将创建一个名为“itsBeanA”的 BeanA 实例。其次,将创建一个名为“specialBeanA”的实例,因为我们在这里提供了 name 属性。可能有一个场景,你需要有多个相同类型的 bean(比如这里的 BeanA)。它将为容器创建歧义,使用所有相同类型的 bean,我们用我们想要的 bean 的名称指定 @Qualifier。我希望这会有所帮助。
推荐阅读
- hive - Hive left join - where 条件
- postgresql - Postgres INSERT 触发器失败
- java - 无法使用嵌入式tomcat服务器在spring boot中运行jsp文件
- python - for循环向量化优化
- javascript - 数组在方法范围内消失
- c - 长双输入到 scanf
- sql-server - 多部分标识符“tblOrders.Weight”和“tblOrders.Variety”无法绑定
- sql - sql) 我想输出字符串
- java - 基于 pathMatcher 添加多个 Spring Security 配置
- javascript - || 之间的区别 和 ??运营商