Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java spring不创建bean_Java_Spring_Javabeans - Fatal编程技术网

Java spring不创建bean

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。两者都是在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);
}
@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在另一端会被使用吗?