Spring XML内部bean问题

Bra*_*ugh 5 spring

我创建了一个包含其他bean列表的spring bean,如下所示:

<bean name="InventoryManager" class="InvManager">
  <property name="slots">
    <bean class="HeadSlot" />
    <bean class="ShoulderSlot" />
    <!-- ... -->
  </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

但问题是,在其他地方,我@Autowired在其他类中使用了一个注释,以获取实现某些内部bean实现的某个接口的所有bean的列表,如下所示:

@Autowired
public void registerInventoryHandlers( List<InvSlot> slots ) {
    //... do some setup stuff with beans that implement the InvSlot interface.
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是,显然XML中定义的"内部bean"不是@Autowired列表的一部分.但是,给出所有这些插槽bean名称,然后从XML引用它们似乎是不必要和丑陋的.

有没有办法在另一个bean中定义bean,但不是一个"内部"bean?或者有更好的方法来处理这种设计?

ska*_*man 5

根据定义,在其他bean中定义的Bean是"内部"bean.文档说:

内部bean总是匿名的,它们总是作为原型.还请注意,不能将内部bean注入除封闭bean之外的协作bean中.

编辑以删除那些经过深思熟虑,无关紧要或完全错误的东西

我建议不要自动InvSlot装配bean 列表,而是用bean 自动自动装配InvManager.然后,您可以询问bean InvManager的列表InvSlot,同时将内部bean定义列表保留在InvManager定义中.