我使用Hibernate和Mybatis作为Dao层,与Spring3一起使用。所有的bean配置都是通过XML实现的。当我们在同一个XML文件中声明Hibernate和Mybatis的bean时,它们之间的集成不会有任何问题。我尝试在不同的文件中解耦它们,并在集成测试中提出了一个问题,因为我们不能执行MyBatis的测试,因为它缺少transactionManager bean。当配置在单个文件中时,这是没有问题的,因为我们有以下内容:
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<!--
sessionFactory bean is provided by Hibernate configuration.
Problem: when decoupling the configuration, there's no
transactionManager bean and the tests fail.
-->
<property name="sessionFactory" ref="sessionFactory" />
</bean>拆分配置后,我在测试环境中通过在MyBatis配置xml中重新定义transactionManager bean解决了这个问题。
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
<property name="dataSource" ref="dataSource" />
</bean>但是现在我有了一个同时需要Hibernate和Mybatis的单元测试。如何避免创建MyBatis配置中定义的transactionManager,只使用Hibernate配置中定义的transactionManager?
发布于 2014-11-08 04:24:49
我会将transactionManager bean定义拆分为第三个文件。因此,您可以根据需要加载两个文件(hibernate + transactionManager或iBatis + transactionManager)或三个文件( hibernate + iBatis + transactionManager)。还可以在始终导入的“公共”spring文件中声明transactionManager。这是我过去使用的方法。我看过一些关于如何覆盖Spring bean定义的文章,但大多数人都不建议这样做。
https://stackoverflow.com/questions/26806342
复制相似问题