Есть ли способ получить имя @Qualifier
от каждого компонента @Autowired List<Bean>
весной. Или в более широком смысле: могу ли я получить информацию Bean @Qualifier
во время выполнения, если у меня есть экземпляр компонента?
Предположим, у меня есть:
//Config.java
@Bean(name = "en-db")
@ConfigurationProperties(prefix = "spring.datasource.en")
public DataSource dataSourceEN() {...}
@Bean(name = "de-db")
@ConfigurationProperties(prefix = "spring.datasource.de")
public DataSource dataSourceDE() {...}
//Repository.java
public Repository(List<DataSource> ds) {
// Is there any way to create a hashmap of Qualifier => Bean?
// like {"en-db" : ds.get(0), "de-db" : ds.get(1)}
// or maybe there is a way to autowire the Hashmap<Qualifier, Bean>
}
Прямо сейчас я использую это (и он отлично работает):
public Repository(@Qualifier("en-db") DataSource en,
@Qualifier("de-db") DataSource de, //... and many more
){
Map<String, EntityManager> dataSources = new HashMap<>();
dataSources.put("en-db", en);
dataSources.put("de-db", de);
...
}
Но у меня есть 10+ источников данных, и я чувствую, что должен быть какой-то способ обнаружить Bean Qualifier даже после autowire, и я могу просто использовать @Autowired List.
PS: это не проблема локализации, я использую все 10 дБ на одной странице