命名具有相同名称的bean组

时间:2016-08-12 09:22:25

标签: java spring

春天有没有办法命名具有相同名称的bean组。例如我有Beans A,B,C,D,EI应该能够加载bean A,B,C,名称为group1并加载bean D ,E,名称为group2。

1 个答案:

答案 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。