Java spring不创建bean
我有两个实现相同接口的bean。两者都是在Java配置中创建的,如下所示:Java spring不创建bean,java,spring,javabeans,Java,Spring,Javabeans,我有两个实现相同接口的bean。两者都是在Java配置中创建的,如下所示: @Bean @Qualifier("kafkaEventSender") public IKafkaEventSender<KafkaData> kafkaEventSender(@Qualifier("EventBus") KafkaTemplate<String, Object> kafkaTemplate){ return new KafkaEventSender<>(k
@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);
}
@Bean
@限定词(“卡夫卡文特森德”)
公共IKafkaEventSender kafkaEventSender(@Qualifier(“EventBus”)KafkaTemplate KafkaTemplate){
返回新的KafkaEventSender(kafkaTemplate,false);
}
@豆子
@限定词(“Kafkaeventsender”)
公共IKafkaEventSender kafkaEventSenderAudited(@Qualifier(“EventBus”)KafkaTemplate KafkaTemplate){
返回新的KafkaEventSenderAudited(kafkaTemplate,false);
}
问题是spring并没有创建第一个bean,而是创建第二个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(name=“kafkaEventSender”)
公共IKafkaEventSender kafkaEventSender(@Qualifier(“EventBus”)KafkaTemplate KafkaTemplate){
返回新的KafkaEventSender(kafkaTemplate,false);
}
@Bean(name=“kafkaEventSenderAudited”)
公共IKafkaEventSender kafkaEventSenderAudited(@Qualifier(“EventBus”)KafkaTemplate KafkaTemplate){
返回新的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。
我希望这会有所帮助。我怀疑它只是创建了一个,您是如何检测到这一点的?是否出现异常?@M.Deinum我在这两种方法中都有一个断点。在创建另一个使用未创建的bean的bean时,我遇到了一个异常,@Qualifier在另一端会被使用吗?