【发布时间】:2019-06-08 00:42:47
【问题描述】:
有什么方法可以在 Spring 中从 @Autowired List<Bean> 的每个 bean 中获取 @Qualifier 名称。或更广泛地说:如果我有一个 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 限定符,我可以只使用 @Autowired 列表。
PS:这不是本地化问题,我在单个页面上使用了所有 10 db
【问题讨论】:
标签: java spring spring-boot dependency-injection autowired