春天有没有办法命名具有相同名称的bean组。例如我有Beans A,B,C,D,EI应该能够加载bean A,B,C,名称为group1并加载bean D ,E,名称为group2。
答案 0 :(得分:0)
您可以通过将@Qualifier("mySpecialImplementation")
添加到@Autowire
字段来指定加载的接口实现。因此,您的实施需要标有@Component("mySpecialImplementation")
。
所以基本上你要为具体的实现分配一个唯一的(String)标识符。要加载特殊实现,请通过限定符注释指定其ID。
如果你真的需要加载"组" bean:只需创建一个新的" group-bean"包含要在此组中加载的所有Bean的自动有线字段。如果你现在注入新的" group-bean",那么组中的所有其他bean也将被加载。
示例:
@Service
class Group1 {
@Autowired
private A a;
@Autowired
private B b;
@Autowired
private C c;
...
}
@Service
class Group2 {
@Autowired
private D d;
@Autowired
private E e;
...
}
加载
@Autowired
Group1 group1;
如果您确实需要加载列表,而不是某种预定义组:
@Autowire
ApplicationContext context;
List<Object> loadBeanGroup(List<String> beanNames){
List<Object> result = new LinkedList<>();
for(String name: beanNames){
result.add(context.getBean(name));
}
return result;
}
因此,您基本上可以使用bean名称(您的组)定义字符串列表。并加载列表中的所有bean。