Как автопрокатить фабрику - PullRequest
7 голосов
/ 28 января 2010

У меня есть ServiceListFactoryBean, который создает список реализаций службы:

<bean id="services"
      class="org.springframework.beans...ServiceListFactoryBean"
      p:serviceType="ServiceInterface"/>

Я могу получить доступ к сервисам, используя applicationContext без проблем:

    final List services = ctx.getBean("services", List.class));

Я также могу успешно использовать метод trad constructor-arg:

<bean id="aClass" class="AClass">
    <constructor-arg ref="services"/>
</bean>

Но если я попытаюсь автоматически связать зависимость

@Autowired @Qualifier("services") private List services;

Тогда я получаю BeanCreationException, вызванное

FatalBeanException: No element type declared for collection [java.util.List]

Я использую Spring 3.0.

Ответы [ 3 ]

10 голосов
/ 28 января 2010

Оказывается, ответ ...

@Resource(name="services") private List services;
4 голосов
/ 28 января 2010

Сообщение об исключении поступило от DefaultListableBeanFactory, и он обнаруживает, что не может автоматически связать ваше поле, поскольку List не имеет универсального типа (см. DefaultListableBeanFactory строка 716).

Попробуйте добавить общую подпись к вашему полю, например:

@Autowired @Qualifier("services") private List<Service> services;
0 голосов
/ 06 октября 2014

Сегодня я действительно обнаружил, что когда вам нужно сопоставить имена бинов с экземплярами определенного интерфейса, вам не нужны @Qualifier и любой код FactoryBean. Весна найдет и введет кандидатов для вас. @Resource не сделал свою работу, на всякий случай.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...