[英]spring not creating bean
我有两个实现相同接口的 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。 知道为什么吗?
尝试使用 bean 名称:
@Bean(name = "kafkaEventSender")
public IKafkaEventSender<KafkaData> kafkaEventSender(@Qualifier("EventBus") KafkaTemplate<String, Object> kafkaTemplate){
return new KafkaEventSender<>(kafkaTemplate, false);
}
@Bean(name = "kafkaEventSenderAudited")
public IKafkaEventSender<KafkaData> kafkaEventSenderAudited(@Qualifier("EventBus") KafkaTemplate<String, Object> kafkaTemplate){
return new KafkaEventSenderAudited<>(kafkaTemplate, false);
}
好的,问题出在方法名称上,更改后,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。 我希望这有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.