java - Spring 无法为 "Generic Dao without special implementation class"案例连接 bean

标签 java spring

我尝试像这样为 Generic DAO 实现解决方案 https://stackoverflow.com/a/511417 . 然而,对于“在没有特殊实现类的情况下使用此 genericDAO”的情况,我得到了 NoSuchBeanDefinitionException。

完整的堆栈跟踪 http://pastebin.com/HwrjEZiX

如我所见,如果没有特殊的实现类,Spring 无法为 Generic Dao 连接 bean

https://dl.dropboxusercontent.com/u/8384811/Misc/2013-05-14_224944.jpg Spring 使用 JdkDynamicAopProxy 来连接 BranchHibernateDao 类,“Using this genericDAO with special implementation Class”案例。

根据 JavaDoc,它创建了一个动态代理,实现了由 * AopProxy。动态代理不能用于代理方法 在类中定义,而不是在接口(interface)中定义。

因此它从 BrunchDao 和 Crud 接口(interface)中看到用于 branchDao bean 定义的方法。

但是它无法连接 branchGenericDao(“在没有特殊实现类的情况下使用此 genericDAO”案例)并且看不到 Crud 接口(interface)方法。

我将不胜感激!

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

最佳答案

问题可能出在您的测试上。当您使用 Spring 编写测试时,您必须使用适当的 Spring 测试运行器。尝试修改您的测试以使其更像 this ,或者尝试实际实现它而不是使用测试框架来实现它以查看它是否有效。

另外,如果你想创建通用的 daos 并且你正在使用 Hibernate,你真的应该看看 Spring Data JPA .使用它将使您的生活比做您想做的事容易 10 倍,因为它可以做您想做的事,而且比您自己实现的工作更少,选择更好。

(您所关注的答案早于 Spring Data。我敢肯定,如果 Spring Data 存在的话,他们会使用它。)

关于java - Spring 无法为 "Generic Dao without special implementation class"案例连接 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16581372/

相关文章:

java - mongodb - 如何使用 mongodb java 客户端锁定集合

java - Camel 文件输入连续读取同一文件,即使给定 noop=true

java - 并行请求的 NullPointer 异常

java - DropWizard 认证领域

java - 使用 @ContextConfiguration 在 JUnit 上使用不同的构造函数参数测试 Spring bean

java - bean 定义中没有指定 bean 类

java - Spring bean 如何检测它自己是否已包装在 AOP 代理中?

java - 在 Spring MVC 中,我有一个 @ModelAttribute 并且它抛出异常。如果我收到此异常,我想显示一个页面。如何?

java - 如何更改正在运行的java进程的优先级?

java - Grails 应用程序部署的最佳应用程序服务器是什么?