Sí, puede hacer esto. Los docs resorte dicen:
También es posible proporcionar todos los granos de un tipo particular de la ApplicationContext mediante la adición de la anotación a un campo o método que espera una matriz de ese tipo.
Tenga en cuenta que dice que necesita esperar una matriz, no una lista. Esto tiene sentido, porque el borrado de tipo genérico significa que una lista puede no funcionar en tiempo de ejecución. Sin embargo, tomar la siguiente prueba de la unidad, que funciona:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean class="test.Test.TypeB"/>
<bean class="test.Test.TypeC"/>
<bean class="test.Test.TypeD"/>
</beans>
y esto prueba de unidad:
package test;
@ContextConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
public class Test {
private @Autowired List<TypeA> beans;
@org.junit.Test
public void test() {
assertNotNull(beans);
assertEquals(2, beans.size());
for (TypeA bean : beans) {
assertTrue(bean instanceof TypeA);
}
}
public static interface TypeA {}
public static class TypeB implements TypeA {}
public static class TypeC extends TypeB {}
public static class TypeD {}
}
Así oficialmente, que se supone que Autowire TypeA[]
, no List<TypeA>
, pero la lista funciona bien.
¿Cómo quieres esta lista para trabajar con prototipos? En caso de que contenga solo una instancia, agregue cada instancia (fuga de memoria) o regrese mediante algún tipo de lista de referencia débil. –
todos los beans serán singletons en mi caso –