我想爲Spring的測試框架使用兩種不同的DAO實現。春季測試框架和基於註釋的自動裝配問題
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 {}
這裏是錯誤:
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]
我已經嘗試覆蓋th通過預選賽Ë自動裝配,例如:
<bean class="jpaadao.UserDAO">
<qualifier value="jpaa"/>
</bean>
<bean class="jpadao.UserDAO">
<qualifier value="jpa"/>
</bean>
然後在測試用例佈線與
@Autowired
@Qualifier("jpa")
private IUserDAO userDAO;
但錯誤依然存在。
兩個問題:
- 如何這個問題,基於註解配置來解決?
- 如何運行測試而不是自動裝配和註釋?
而我繼續使用@Autowired而不是@Resource? – 2010-07-08 23:17:58
@Resource不如@Autowired靈活,我只會在不能使用時才使用它如果你使用Spring來連接EJB,你的測試用例與它沒有任何業務關係,特別是因爲最新版本的Spring 3支持在匹配字段名稱上自動消除歧義。 – iwein 2010-07-09 20:08:13