Yup, вы можете это сделать. Весной документы говорят:
Кроме того, можно обеспечить все бобы определенного типа из ApplicationContext путем добавления аннотацию к полю или методу, который ожидает массив этого типа.
Обратите внимание, что в нем говорится, что вам нужно ожидать массив, а не список. Это имеет смысл, поскольку стирание типового типа означает, что список не может работать во время выполнения. Тем не менее, принять следующий тест блок, который работает:
<?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>
и этот тест блока:
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 {}
}
Так официально, вы должны autowire TypeA[]
, не List<TypeA>
, но список работает хорошо.
Как вы хотите этот список, чтобы работать с прототипами? Если он содержит только один экземпляр, добавьте каждый экземпляр (утечку памяти) или вернитесь в какой-то слабенький список ссылок. –
все бобы будут синглонами в моем случае –