この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>
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