Sì, puoi farlo. La documentazione molla dicono:
È altresì possibile prevedere tutti fagioli di un particolare tipo dal ApplicationContext aggiungendo il nota a un campo o un metodo che aspetta un array di quel tipo.
Si noti che è necessario prevedere un array, non un elenco. Questo ha senso, perché la cancellazione di un tipo generico significa che una lista potrebbe non funzionare in fase di runtime. Tuttavia, prendere il seguente test di unità, che funziona:
<?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>
e questo test di unità:
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 {}
}
Quindi ufficialmente, si suppone di autowire TypeA[]
, non List<TypeA>
, ma l'elenco funziona bene.
Come si desidera che questa lista di lavorare con i prototipi? Dovrebbe contenere solo un'istanza, aggiungere ogni istanza (perdita di memoria) o tornare da una qualche forma di lista di riferimento debole. –
tutti i fagioli saranno singoletti nel mio caso –