如果以前没有加载bean,如何创建bean定义?

时间:2014-11-07 17:04:00

标签: java spring spring-transactions

我正在使用Hibernate和Mybatis作为Dao层,与Spring 3一起使用。所有bean配置都是通过XML进行的。当我们在同一个XML文件中声明这些bean时,Hibernate和Mybatis之间的集成没有任何问题。我试图将它们分离到不同的文件中,并在集成测试中引发问题,因为我们无法执行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 config xml中的transactionManager bean来解决测试环境中的这个问题。

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
    <property name="dataSource" ref="dataSource" />
</bean>

但现在我有一个单元测试,Hibernate和Mybatis都是必需的。如何避免在MyBatis配置中定义transactionManager创建仅使用Hibernate配置中定义的transactionManager

1 个答案:

答案 0 :(得分:0)

我会将transactionManager bean定义拆分为第三个文件。因此,您可以根据需要加载两个文件(hibernate + transactionManager或iBatis + transactionManager)或三个文件(hibernate + iBatis + transactionManager)。 transactionManager也可以在&#34; common&#34;中声明。始终导入的弹簧文件。这是我过去使用的方法。我已经看过有关如何覆盖Spring bean定义的帖子,但大多数人建议不要使用它。