繁体   English   中英

仅在未加载bean的情况下才如何创建bean定义?

[英]How to create a bean definition only if the bean was not loaded before?

我与Spring 3一起在Dao层上使用了Hibernate和Mybatis。所有的bean配置都是通过XML。 当我们在同一XML文件中声明这些bean时,Hibernate和Mybatis之间的集成没有任何问题。 我试图将它们分离到不同的文件中,从而导致集成测试出现问题,因为我们无法为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配置xml中重新定义transactionManager bean在测试环境中解决了此问题。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM