我有一个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。
答案 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
并没有做到这一点,以防万一。