Spring: два компонента с одинаковыми именами, имеющие разные значения

#spring #spring-boot

#spring #spring-boot

Вопрос:

Два компонента, квалифицированные по-разному с одним и тем же именем, дают мне исключение.

Сообщение об исключении:

 ***************************
APPLICATION FAILED TO START
***************************

Description:

The bean 'tipusFonsSql', defined in class path resource [net/gencat/clt/arxius/connector/config/SqlGiacTxtResourceLoader.class], could not be registered. A bean with that name has already been defined in class path resource [net/gencat/clt/arxius/connector/config/SqlGiacImgResourceLoader.class] and overriding is disabled.
 

Это говорит мне о том, что class SqlGiacTxtResourceLoader и class SqlGiacImgResourceLoader определяют два компонента с одинаковым именем.

Тем не менее, они "@Qualified" разные. Я имею в виду:

В SqlGiacImgResourceLoader

 @Bean
@GiacImg @TipusFonsQ
public String tipusFonsSql() {
    //...
}
 

В SqlGiacTxtResourceLoader

 @Bean
@GiacTxt @TipusFonsQ
public String tipusFonsSql() {
    //...
}
 

Как вы можете видеть, один "@aulified" с @GiacImg аннотацией, а другой с помощью @GiacTxt .

Есть идеи?

Комментарии:

1. У вас не может быть одинакового идентификатора для разных компонентов. Так что это не сработает.

Ответ №1:

Вы должны назвать их так

 @Bean(name = "GiacImg TipusFonsQ")
public String tipusFonsSql() {
    //...
}
 

и

 @Bean(name = "GiacTxt TipusFonsQ")
public String tipusFonsSql() {
    //...
}
 

чтобы избежать конфликта компонентов

Ответ №2:

Существует 2 способа решения этой проблемы (ха-ха, их может быть много, но я знаю ниже 2 подхода):——

1-й способ

измените имя компонента:—

 @Bean(name = "custome bean name")
 

2-й способ

запишите приведенный ниже ключ в application.properties:—

 spring.main.allow-bean-definition-overriding=true
 

ПРИМЕЧАНИЕ: -в вашем случае вы также можете изменить имя метода