2016-08-12 99 views
0

有没有什么方法可以在spring中命名同名bean组。例如,我有Bean A,B,C,D,EI应该能够加载bean A,B,C名称为group1,加载bean D,E的名称为group2。命名组名称相同的豆

+0

也许你可以创建一个注入其他bean然后加载它的bean组1?客体是什么? – DamienB

+0

什么是客观的? – pppavan

+0

你为什么要这样做?有理由吗?还是仅仅通过单个条目调用多个bean? – DamienB

回答

0

您可以通过将@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。

+0

我需要像iist一样加载多个豆子 – pppavan

+0

这正是我上面所描述的。让我通过代码示例来阐明解决方案。我将编辑我的帖子。 – gorootde

+0

这里它不是动态的..在我的情况下,它应该更具动态性。像自动装配地图 – pppavan

相关问题