如何使用spring但不使用xml配置(我们应仅使用注释)将java bean的Map(或List)注入一些不同类的实例?我希望能够通过名称或实现类来指定要插入该映射的特定实例
实例将使用如下声明:
@Component(“ instanceA”) 公共类A实现了I {
...
}
为简单起见,我们可以首先假设所有实例都实现相同的接口,但这并不总是正确的。
答案 0 :(得分:0)
您可以使用bean工厂来访问所有必需的bean
@Autowired
private ListableBeanFactory beanFactory;
beansOfType.getBeansOfType()
返回地图BeanName -> Bean
。
您只需要知道要“注入”的bean名称。 列出必要的BeanNames;
然后,您只能摄取必要的豆子。
Map<String, YourInterface> beansOfType = beanFactory.getBeansOfType(YourInterface.class);
List<YourInterface> necessaryBeanNames.stream().map(b-> beansOfType.get(b)).filter(b -> b != null).collect(toList());
答案 1 :(得分:0)
尚无可以为您完成此操作的注释,但是您可以使用@Bean和@Qualifier获得所需的结果。
@Bean
public List<YourInterface> getList(@Qualifier("yourCherryPickedInterfaceImpl1") YourInterface yourCherryPickedInterfaceImpl1, @Qualifier("yourCherryPickedInterfaceImpl2") YourInterface yourCherryPickedInterfaceImpl2) {
return Arrays.asList(new YourInterface[]{yourCherryPickedInterfaceImpl1, yourCherryPickedInterfaceImpl2});
}