初始化在spring xml中实现相同接口的多个类实例

时间:2014-02-25 11:20:31

标签: java spring

我有两个实现接口的类。这些课程分为两个不同的课程。

package com.service;
public interface PServices{ }

package com.transaction.service.v2;
@Transactional(propagation = Propagation.REQUIRED, rollbackFor=Exception.class)
public class PServicesImpl implements PServices {}


package com.transaction.service.v1;
@Transactional(propagation = Propagation.REQUIRED, rollbackFor=Exception.class)
public class PServicesImpl implements PServices {}

我在spring xml中初始化类,如下所示:

<bean id="pServicesv1"
    class="com.transaction.service.v1.PServicesImpl" />

    <bean id="pServicesv2"
    class="com.transaction.service.v2.PServicesImpl" />

但在服务器启动期间,我收到以下错误。

  

没有定义com.service.PServices类型的唯一bean:expected   单豆但发现2

如何在这里初始化多个类?由于限制,我无法使用注释。

1 个答案:

答案 0 :(得分:1)

在服务器启动期间,您会收到错误,因为您尝试注入/自动连接接口而不是实际实现。当您尝试Inject / Autowire时,Spring将尝试识别Inject / Autowire中的哪个bean。由于您有两个相同类型的定义bean(接口),因此Spring无法确定哪个是Inject。

在bean定义中使用autowire="byName",这样当您尝试Inject / Autowire接口时,它将根据名称注入bean。

 <bean id="pServicesv1"
    class="com.transaction.service.v1.PServicesImpl" 
    autowire="byName"/>