2014-02-25 5 views
1

인터페이스를 구현하는 두 개의 클래스가 있습니다. 클래스는 두 개의 다른 패키지에 있습니다.동일한 인터페이스를 구현하는 클래스의 인스턴스를 여러 개 초기화합니다.

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

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

그러나 서버를 시작하는 동안 나는 다음과 같은 오류가 발생하고 다음과 같이

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 {} 

나는 봄 XML의 클래스를 초기화합니다. 예상 하나의 콩을하지만, 어떻게 여기에 여러 클래스를 초기화하는

이 발견 :

형 com.service.PServices 없음 고유의 콩

정의된다? 제약으로 인해 주석을 사용할 수 없습니다.

답변

1

서버를 시작하는 동안 실제 구현이 아닌 인터페이스를 삽입/자동 추가하려고하기 때문에 오류가 발생합니다. 당신이 Inject/Autowire를 시도 할 때 Spring은 어떤 Bean이 Inject/Autowire인지 확인하려고 시도 할 것입니다. 동일한 유형 (인터페이스)의 두 개의 정의 된 bean이 있으므로, Spring은 어느 유형을 Inject할지 결정할 수 없습니다.

빈 정의에 autowire="byName"을 사용하면 인터페이스를 삽입/자동 와이어하려고 할 때 이름을 기반으로 빈을 주입 할 수 있습니다.

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

죄송합니다. 여전히 오류가 있습니다. 동일한 오류가 발생합니다. –

관련 문제