在我的测试用例的设置中,我有这段代码:
ApplicationContext context = new ClassPathXmlApplicationContext(
"spring/common.xml"
);
StaticListableBeanFactory testBeanFactory = new StaticListableBeanFactory();
如何以这样的方式连接这两者:测试可以在设置期间在testBeanFactory
中注册bean,而应用程序的其余部分使用它们而不是common.xml
中定义的那些?
注意:我需要混合静态(common.xml)和动态配置。我不能将XML用于后者,因为这意味着要写> 1000个XML文件。
答案 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会覆盖定义。
编辑:刚刚注意到这不适合您的情况 - 为了完整起见,我会留在这里。