3 回答

TA貢獻1871條經(jīng)驗 獲得超13個贊
我有兩個實現(xiàn)相同接口的 bean。兩者都是在 Java 配置中創(chuàng)建的,如下所示:
@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 不會只創(chuàng)建第二個 bean。知道為什么嗎?

TA貢獻1820條經(jīng)驗 獲得超9個贊
注解用于在 spring 容器中多個相同類型的可用 bean 中選擇一個 bean。
當您使用@Bean 注解注解一個方法時,默認情況下,它會創(chuàng)建一個名稱為相同方法名稱的 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);
}
第一個方法將創(chuàng)建一個名為“itsBeanA”的 BeanA 實例。其次,將創(chuàng)建一個名為“specialBeanA”的實例,因為我們在此處提供了 name 屬性。可能有一個場景,你需要有多個相同類型的 bean(比如這里的 BeanA)。它將為容器使用所有相同類型的 bean 創(chuàng)建歧義,我們使用我們想要的 bean 名稱指定 @Qualifier。我希望這有幫助。
添加回答
舉報