代码之家  ›  专栏  ›  技术社区  ›  Paul McKenzie

如何自动连线FactoryBean

  •  7
  • Paul McKenzie  · 技术社区  · 16 年前

    我有一个ServiceListFactoryBean,它创建了一个服务实现列表:

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

    我可以使用applicationcontext访问服务,而不会出现问题:

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

    我还可以成功使用trad构造函数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]
    

    我正在使用Spring3.0。

    3 回复  |  直到 11 年前
        1
  •  10
  •   Paul McKenzie    16 年前

    原来答案是…

    @Resource(name="services") private List services;
    
        2
  •  4
  •   skaffman    16 年前

    异常消息来自 DefaultListableBeanFactory ,而且它无法自动连接您的字段,因为 List 没有泛型类型(请参见 DefaultListableBeanFactory公司 第716行)

    尝试将泛型签名添加到字段e.h。

    @Autowired @Qualifier("services") private List<Service> services;
    
        3
  •  0
  •   nefo_x    11 年前

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