Я хотел бы использовать две разные реализации для DAO с тестовой средой Spring.
src.main.java
.businessobjects
\-User.java
.dao
\-IUserDAO.java
.daojpa
\-UserDAO.java
.daohibernate
\-UserDAO.java
Весенний тестовый пример в:
src.test.java.base:
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 {}
И вот ошибка:
Вызвано: java.lang.IllegalStateException: указанное в аннотации имя компонента userDAO для класса компонента [jpadao.UserDAO] конфликтует с существующим несовместимым определением компонента с тем же именем и классом [jpaadao.UserDAO].
Я уже пытался переопределить автопроводку с помощью квалификаторов, например:
<bean class="jpaadao.UserDAO">
<qualifier value="jpaa"/>
</bean>
<bean class="jpadao.UserDAO">
<qualifier value="jpa"/>
</bean>
А затем в проводке testcase с
@Autowired
@Qualifier("jpa")
private IUserDAO userDAO;
но ошибка сохраняется.
Два вопроса:
- Как можно решить эту проблему с помощью конфигурации на основе аннотаций?
- Как запустить тесты БЕЗ автосвязывания и аннотаций?