【问题标题】:How do I connect StaticListableBeanFactory with ClassPathXmlApplicationContext?如何将 StaticListableBeanFactory 与 ClassPathXmlApplicationContext 连接?
【发布时间】:2011-03-01 15:04:06
【问题描述】:

在我的测试用例设置中,我有以下代码:

    ApplicationContext context = new ClassPathXmlApplicationContext(
            "spring/common.xml"
    );
    StaticListableBeanFactory testBeanFactory = new StaticListableBeanFactory();

如何连接这两者,以便测试可以在设置期间在 testBeanFactory 中注册 bean,而应用程序的其余部分使用它们而不是 common.xml 中定义的那些?

注意:我需要混合使用静态(common.xml)和动态配置。我不能将 XML 用于后者,因为这意味着要编写 > 1000 个 XML 文件。

【问题讨论】:

    标签: java unit-testing spring junit


    【解决方案1】:

    您可以使用ConfigurableListableBeanFactory.registerSingleton() 代替StaticListableBeanFactory.addBean()

    ApplicationContext context = new ClassPathXmlApplicationContext(
                "spring/common.xml" 
        ); 
    
    GenericApplicationContext child = new GenericApplicationContext(context);
    
    child.getBeanFactory().registerSingleton("foo", ...);
    

    【讨论】:

      【解决方案2】:

      您可能想尝试的另一种方法是使用带有导入 common.xml 的 bean 定义的 Test.xml:

      <import resource="spring/common.xml"/>
      
      <bean id="AnIdThatOverridesSomethingInCommon"/>
      

      你只能有一个具有特定 id 的 bean 定义 - 在同一个文件中它是一个 XML 验证错误,在不同的文件中 Spring 将覆盖定义。

      编辑:刚刚注意到这不适合您的情况 - 为了完整起见,我将其留在这里。

      【讨论】:

      • 谢谢 - 这实际上是我使用的,但我想如果您尝试将其应用于现有测试的负载,您不会想要。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-14
      • 2015-04-11
      • 2018-09-30
      • 2016-06-16
      • 2020-08-23
      • 2019-01-29
      • 1970-01-01
      相关资源
      最近更新 更多