如何自动装配factorybean

时间:2010-01-28 08:59:28

标签: java spring

我有一个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;

然后我得到了由{/ p>引起的BeanCreationException

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

我正在使用Spring 3.0。

3 个答案:

答案 0 :(得分:10)

事实证明答案是......

@Resource(name="services") private List services;

答案 1 :(得分:4)

异常消息来自DefaultListableBeanFactory,并且它正在强调它无法自动装配您的字段,因为List没有泛型类型(请参阅DefaultListableBeanFactory第716行)。

尝试在您的字段中添加通用签名,e.h。

@Autowired @Qualifier("services") private List<Service> services;

答案 2 :(得分:0)

我今天真正发现的是,当你需要将bean名称映射到特定接口的实例时,不需要@Qualifier和任何类型的FactoryBean代码。 Spring会为你找到并注入候选人。 @Resource并没有做到这一点,以防万一。