5 Stimmen

Wie kann ich StaticListableBeanFactory mit ClassPathXmlApplicationContext verbinden?

In der Einrichtung meiner Testfälle habe ich diesen Code:

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

Wie verbinde ich die beiden so, dass die Tests die Bohnen in der testBeanFactory während der Einrichtung, und der Rest der Anwendung verwendet sie anstelle der in common.xml ?

Hinweis: Ich muss eine statische (common.xml) und eine dynamische Konfiguration mischen. Für letztere kann ich kein XML verwenden, da dies bedeuten würde, dass ich > 1000 XML-Dateien schreiben müsste.

4voto

axtavt Punkte 233070

Sie können verwenden ConfigurableListableBeanFactory.registerSingleton() 代わりに StaticListableBeanFactory.addBean() :

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

GenericApplicationContext child = new GenericApplicationContext(context);

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

0voto

cyborg Punkte 5448

Eine Alternative, die Sie ausprobieren könnten, ist eine Test.xml mit den Bean-Definitionen, die Ihre common.xml importiert:

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

<bean id="AnIdThatOverridesSomethingInCommon"/>

Sie können nur eine Bean-Definition mit einer bestimmten ID haben - in derselben Datei ist es ein XML-Validierungsfehler, in verschiedenen Dateien überschreibt Spring die Definition.

Edit: Ich habe gerade bemerkt, dass dies nicht für Ihren Fall geeignet ist - ich lasse es der Vollständigkeit halber hier.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X