Мне нужен интерфейс autwire, который имеет пару реализации. Я использую @Qualifier для достижения this-spring autowire multiple implementation
Интерфейс DataSourceConfig
public interface DataSourceConfig {
DataSource getDataSource();
}
Реализация 1:
@Configuration("mysql")
public class MySqlDataSourceConfig implements DataSourceConfig {
@Bean
public DataSource getDataSource() {
System.out.println("MySQL datasource");
//some implementation
return dataSource;
}
}
Осуществление 2:
@Configuration("hsql")
public class HsqlDataSourceConfig implements DataSourceConfig {
@Bean
public DataSource getDataSource() {
System.out.println("hsql dataSource");
return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.HSQL).addScript(
"classpath:database/schema.sql").addScript(
"classpath:database/datascript.sql").build();
}
}
Клиент:
@Configuration
public class Client {
@Autowired
@Qualifier("hsql")
DataSourceConfig hsqlDataSource;
@Autowired
@Qualifier("mysql")
DataSourceConfig mysqlDataSource;
}
только один источник данных (mysqlDataSource) создается и я вижу следующее сообщение в моем журнале. Это в режиме INFO, хотя -
org.springframework.beans.factory.support.DefaultListableBeanFactory.registerBeanDefinition Overriding bean definition for bean 'hsqlDataSource':
Не путайте имя '@Conf iguration' в качестве имени вашего компонента DataSource. –
@SotiriosDelimanolis Если я даю имя bean-компоненту и добавляю квалификатор на основе имени bean-компонента, он не автоустанавливает какой-либо источник данных -org.springframework.beans.factory.NoSuchBeanDefinitionException: не имеет определяющего компонента типа [com.sample.config .DataSourceConfig], найденный для зависимости: ожидается как минимум 1 компонент, который квалифицируется как кандидат на автоподключение для этой зависимости. – Pankaj
Я хочу сказать, что '@Qualifier (" hsql ")' фактически ссылается на компонент 'HsqlDataSourceConfig', определенный с помощью' @Configuration ("hsql") '. Отправьте MCVE. –