Vorrei utilizzare due diverse implementazioni per un DAO con il framework di prova di Spring.Spring Test Framework e autowiring basato su annotazione Problema
src.main.java
.businessobjects
\-User.java
.dao
\-IUserDAO.java
.daojpa
\-UserDAO.java
.daohibernate
\-UserDAO.java
Il TestCase primavera in:
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 {}
E qui è l'errore:
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]
Ho già provato a sovrascrivere e autowiring utilizzando qualificatori, es .:
<bean class="jpaadao.UserDAO">
<qualifier value="jpaa"/>
</bean>
<bean class="jpadao.UserDAO">
<qualifier value="jpa"/>
</bean>
E poi nel cablaggio testcase con
@Autowired
@Qualifier("jpa")
private IUserDAO userDAO;
ma l'errore persiste.
due domande:
- Come può questo problema essere risolto con la configurazione di annotazione basato?
- Come posso eseguire i test SENZA autowiring e annotazioni?
E ho portato avanti utilizzando @Autowired piuttosto che @Resource? –
@Resource è meno flessibile di @Autowired. Userei solo se non è possibile avere una dipendenza primavera nella classe si sta cablaggio con esso, e se si sta utilizzando primavera per cablare EJB. il tuo banco di prova non ha commercio con esso, tanto più che le ultime versioni di Spring 3 supporto autowiring disambiguazione sulla corrispondenza nomi dei campi. – iwein