命名组名称相同的豆
问题描述:
有没有什么方法可以在spring中命名同名bean组。例如,我有Bean A,B,C,D,EI应该能够加载bean A,B,C名称为group1,加载bean D,E的名称为group2。命名组名称相同的豆
答
您可以通过将@Qualifier("mySpecialImplementation")
添加到@Autowire
字段来指定加载了哪个接口实现。因此,您的实施需要标记为@Component("mySpecialImplementation")
。
所以基本上你是分配一个唯一的(字符串)标识符到你的具体实现。要加载特殊实现,请使用Qualifier批注指定其ID。
如果您确实需要加载一组“bean”:只需创建一个新的“group-bean”,其中包含要在该组中加载的所有bean的自动连线字段。如果您现在注入新的“组bean”,组中的所有其他bean也将被加载。
例子:
@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;
}
所以你基本上是:通过
@Autowired
Group1 group1;
如果你真的需要加载一个列表,而不是某种预定组的
@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;
...
}
加载可以用bean名称(你的组)来定义一个字符串列表。并加载列表中的所有bean。
也许你可以创建一个注入其他bean然后加载它的bean组1?客体是什么? – DamienB
什么是客观的? – pppavan
你为什么要这样做?有理由吗?还是仅仅通过单个条目调用多个bean? – DamienB