如何将StaticListableBeanFactory与ClassPathXmlApplicationContext连接?

时间:2010-06-09 11:33:56

标签: java unit-testing spring junit

在我的测试用例的设置中,我有这段代码:

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

GenericApplicationContext child = new GenericApplicationContext(context);

child.getBeanFactory().registerSingleton("foo", ...);

答案 1 :(得分:0)

您可能想尝试的替代方法是使用导入common.xml的bean定义的Test.xml:

<import resource="spring/common.xml"/>

<bean id="AnIdThatOverridesSomethingInCommon"/>

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

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