3

このhttps://stackoverflow.com/a/511417のようなジェネリック DAO のソリューションを実装しようとしています。ただし、「特別な実装クラスなしでこの 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 クラスを配線します。「この genericDAO を特別な実装クラスで使用する」場合。

JavaDoc によると、動的プロキシを作成し、AopProxy によって公開される * インターフェースを実装します。動的プロキシは、インターフェイスではなく、クラスで定義されたメソッドをプロキシするために使用できません。

したがって、branchDao Bean 定義の BrunchDao および Crud インターフェースからのメソッドが表示されます。

ただし、branchGenericDao (「特別な実装クラスなしでこの genericDAO を使用する」ケース) を配線することはできず、Crud インターフェイス メソッドは表示されません。

どんな助けにも感謝します!

豆の配線

<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

Crud ソースはこちらhttps://github.com/jtalks-org/jtalks-common/blob/master.senleft/jtalks-common-model/src/main/java/org/jtalks/common/model/dao/Crud です。ジャワ

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

4

1 に答える 1

0

問題はおそらくテストにあります。Spring でテストを作成する場合は、適切な Spring テスト ランナーを使用する必要があります。このように動作するようにテストを変更するか、テスト フレームワークを使用せずに実際に実装してみて、動作するかどうかを確認してください。

また、ジェネリック daos を作成する必要があり、Hibernate を使用している場合は、本当にSpring Data JPAを調べる必要があります。それを使用すると、あなたがやろうとしていることを実行するため、あなたがやろうとしていることを実行するよりも10倍楽になりますが、自分で実装できるよりも少ない作業とより良いオプションで済みます.

(あなたがフォローしている答えは、Spring Dataより前のものです。Spring Dataが存在する場合、彼らはSpring Dataを使用していたと確信しています。)

于 2013-05-16T08:18:33.927 に答える