首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何仅在以前未加载bean时创建bean定义?

如何仅在以前未加载bean时创建bean定义?
EN

Stack Overflow用户
提问于 2014-11-08 01:04:00
回答 1查看 79关注 0票数 1

我使用Hibernate和Mybatis作为Dao层,与Spring3一起使用。所有的bean配置都是通过XML实现的。当我们在同一个XML文件中声明Hibernate和Mybatis的bean时,它们之间的集成不会有任何问题。我尝试在不同的文件中解耦它们,并在集成测试中提出了一个问题,因为我们不能执行MyBatis的测试,因为它缺少transactionManager bean。当配置在单个文件中时,这是没有问题的,因为我们有以下内容:

代码语言:javascript
复制
<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解决了这个问题。

代码语言:javascript
复制
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
    <property name="dataSource" ref="dataSource" />
</bean>

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

EN

回答 1

Stack Overflow用户

发布于 2014-11-08 04:24:49

我会将transactionManager bean定义拆分为第三个文件。因此,您可以根据需要加载两个文件(hibernate + transactionManager或iBatis + transactionManager)或三个文件( hibernate + iBatis + transactionManager)。还可以在始终导入的“公共”spring文件中声明transactionManager。这是我过去使用的方法。我看过一些关于如何覆盖Spring bean定义的文章,但大多数人都不建议这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26806342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档