He creado un grano de primavera que contiene una lista de otros granos, así:XML Spring frijol interior pregunta
<bean name="InventoryManager" class="InvManager">
<property name="slots">
<bean class="HeadSlot" />
<bean class="ShoulderSlot" />
<!-- ... -->
</property>
</bean>
El problema, sin embargo, es que en otro lugar he utilizado una anotación @Autowired
en otra clase de agarrar una lista de todos los granos que implementan una determinada interfaz que algunos de estos granos de interiores poner en práctica, de este modo:
@Autowired
public void registerInventoryHandlers(List<InvSlot> slots) {
//... do some setup stuff with beans that implement the InvSlot interface.
}
el problema aquí es que al parecer los "granos de interiores" definidos en XML no son parte de la lista @Autowired
. Sin embargo, dar todos estos nombres de beans de ranura y luego hacer referencia a ellos desde el XML parece innecesario y feo.
¿Hay alguna manera de definir un bean dentro de otro bean, pero no ser un bean "interno"? ¿O hay una mejor manera de manejar este diseño?
¡Ah, todo lo contrario! @Autowired tiene algunos usos sorprendentes y menos conocidos. Para citar la documentación de Spring: "También es posible proporcionar todos los beans de un tipo particular de ApplicationContext agregando la anotación a un campo o método que espera una matriz de ese tipo" –
Bloody hell, por lo que lo hace. Le agradezco señor, me ha enseñado algo nuevo :) – skaffman
Intenté utilizarlo para alimentar una especie de cola de eventos "no es necesario que usted se registre" y pensé que era muy inteligente. Pero luego me encontré con esta lata de gusanos en particular. –