开发者

How do I connect StaticListableBeanFactory with ClassPathXmlApplicationContext?

开发者 https://www.devze.com 2023-01-02 16:30 出处:网络
In the setup of my test cases, I have this code: ApplicationContext context = new ClassPathXmlApplicationContext(

In the setup of my test cases, I have this code:

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

How do I connect the two in such a way that tests can register beans开发者_如何学C in the testBeanFactory during setup and the rest of the application uses them instead of the ones defined in common.xml?

Note: I need to mix a static (common.xml) and a dynamic configuration. I can't use XML for the latter because that would mean to write > 1000 XML files.


You can use ConfigurableListableBeanFactory.registerSingleton() instead of StaticListableBeanFactory.addBean():

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

GenericApplicationContext child = new GenericApplicationContext(context);

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


An alternative you might like to try is to have a Test.xml with the bean definitions that imports your common.xml:

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

<bean id="AnIdThatOverridesSomethingInCommon"/>

You can only have one bean definition with a particular id - in the same file it's an XML validation error, in different files Spring will override the definition.

Edit: Just noticed that this is not suitable for your case - I'll leave it here for completeness.

0

精彩评论

暂无评论...
验证码 换一张
取 消