我创建了一个包含其他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?或者有更好的方法来处理这种设计?
根据定义,在其他bean中定义的Bean是"内部"bean.文档说:
内部bean总是匿名的,它们总是作为原型.还请注意,不能将内部bean注入除封闭bean之外的协作bean中.
编辑以删除那些经过深思熟虑,无关紧要或完全错误的东西
我建议不要自动InvSlot装配bean 列表,而是用bean 自动自动装配InvManager.然后,您可以询问bean InvManager的列表InvSlot,同时将内部bean定义列表保留在InvManager定义中.
| 归档时间: |
|
| 查看次数: |
2808 次 |
| 最近记录: |