2013-05-16 52 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的数据,如果它的存在。)

相关问题