2013-05-16 62 views
3

我嘗試實現像這樣的Generic DAO的解決方案。 但是對於「使用此genericDAO沒有特殊實現類」的情況下,我得到NoSuchBeanDefinitionException。春天無法爲「沒有特殊實現類的Generic Dao」案例連接bean

完整的堆棧跟蹤http://pastebin.com/HwrjEZiX

在我沒有特別的實現類春季不能用於佈線通用的DAO豆

https://dl.dropboxusercontent.com/u/8384811/Misc/2013-05-14_224944.jpg Spring使用JdkDynamicAopProxy佈線BranchHibernateDao類,「使用這種genericDAO與專項實施類「情況。

根據JavaDoc它創建一個動態代理,實現 * AopProxy公開的接口。動態代理服務器不能使用來代理在類中定義的方法 ,而不是接口。

因此,它看到了用於branchDao bean定義的BrunchDao和Crud接口的方法。

但它不能連接branchGenericDao(「使用此genericDAO沒有特殊實現類」的情況下)並沒有看到Crud接口方法。

我會感謝您的任何幫助!

Bean的佈線

<bean id="branchDao" class="org.jtalks.poulpe.model.dao.hibernate.BranchHibernateDao" parent="genericDao"/> 

<bean id="branchGenericDao" class="org.jtalks.common.model.dao.hibernate.GenericDao"> 
<qualifier value="branchGenericDao"/> 
<constructor-arg name="sessionFactory" ref="sessionFactory"/> 
<constructor-arg name="type" value="org.jtalks.poulpe.model.entity.PoulpeBranch"/> 
</bean> 

<bean id="genericDao" abstract="true" class="org.jtalks.common.model.dao.hibernate.GenericDao"> 
<constructor-arg name="sessionFactory" ref="sessionFactory"/> 
</bean> 

測試源是這裏https://github.com/jtalks-org/poulpe/blob/master.senleft/poulpe-model/src/test/java/org/jtalks/poulpe/model/dao/hibernate/BranchHibernateDaoTest.java

源界面污物這裏https://github.com/jtalks-org/jtalks-common/blob/master.senleft/jtalks-common-model/src/main/java/org/jtalks/common/model/dao/Crud.java

GenericDao來源是這裏https://github.com/jtalks-org/jtalks-common/blob/master.senleft/jtalks-common-model/src/main/java/org/jtalks/common/model/dao/hibernate/GenericDao.java

BranchHibernateDao來源是這裏https://github.com/jtalks-org/poulpe/blob/master.senleft/poulpe-model/src/main/java/org/jtalks/poulpe/model/dao/hibernate/BranchHibernateDao.java

+0

的問題是在branchGenericDao bean類型。在測試branchGenericDao字段時,我聲明瞭GenericDao類型(類)不是Crud類型(接口)。從GenericDao改變類型到Crud解決了這個問題。 – senleft

回答

0

問題可能與您的測試有關。當你用Spring編寫測試時,你必須使用合適的Spring測試運行器。嘗試修改你的測試,使其更像this,或嘗試實際執行它,而不是通過測試框架來測試它是否可行。另外,如果你想創建通用的daos並且你正在使用Hibernate,你應該仔細研究Spring Data JPA。使用它會讓你的生活比做你想做的事情容易10倍,因爲它可以做你想做的事情,但是工作量少,選擇更好,比你自己能夠實現的要少。

(你是以下預定日期春季數據的回答。我敢肯定,他們將用過Spring的數據,如果它的存在。)

相關問題