스프링의 testframework가있는 DAO에 두 가지 다른 구현을 사용하고 싶습니다.스프링 테스트 프레임 워크와 어노테이션 기반 autowiring 문제
src.main.java
.businessobjects
\-User.java
.dao
\-IUserDAO.java
.daojpa
\-UserDAO.java
.daohibernate
\-UserDAO.java
의 스프링 테스트 케이스 :
이src.test.java.base :
: 여기Caused by: java.lang.IllegalStateException: Annotation-specified bean name 'userDAO' for bean class [jpadao.UserDAO] conflicts with existing, non-compatible bean definition of same name and class [jpaadao.UserDAO]
package base;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/hibernate-beans.xml")
@Transactional
public abstract class SpringTestCase {}
그리고 오류입니다
나는 이미 th를 무시하려고 시도했다. 전자
@Autowired
@Qualifier("jpa")
private IUserDAO userDAO;
과 사용 규정에 의한 autowiring을, 예컨대 : 테스트 케이스 배선에서 다음
<bean class="jpaadao.UserDAO">
<qualifier value="jpaa"/>
</bean>
<bean class="jpadao.UserDAO">
<qualifier value="jpa"/>
</bean>
그리고 있지만 오류가 계속.
두 질문 :
- 방법이 문제가 주석 기반 구성으로 해결 될 수있다?
- 테스트를 실행하려면 어떻게해야합니까? 없이 autowiring 및 특수 효과를 사용할 수 있습니까?
그리고 @Resource 대신 @Autowired를 사용했습니다? –
@Resource는 @Autowired보다 유연성이 떨어집니다. 당신이 그것과 함께 묶는 클래스에 Spring 의존성을 가지고 있고, EJB를 와이어 링하기 위해 Spring을 사용한다면 테스트 케이스는 그것과 아무런 관련이 없다. 특히 Spring 3의 최신 버전은 일치하는 필드 이름에 autowiring disambiguation를 지원하기 때문에 그렇다. – iwein