Ich benutze zwei identische Beans in meiner applicationContext.xml und meiner applicationContext-test.xml. Ich möchte, dass mein Testkontext von meinem App-Kontext erben kann, damit ich mich nicht wiederhole.
Ich habe viel Material gesehen, das anzeigt, dass Sie einen übergeordneten Anwendungskontext deklarieren und Beans aus diesem Kontext referenzieren können, aber ich kann kein brauchbares Beispiel finden. Kann jemand helfen?
Aktualisieren Als Hintergrundinformationen wird mein normaler Anwendungskontext in web.xml geladen:
%Vor%Mein Testanwendungskontext wird in meine Komponententests geladen:
%Vor%Also sagen wir, ich habe eine Bean in meinem regulären Kontext:
%Vor%Dann möchte ich mich in meinem Testanwendungskontext auf diese Bean beziehen. Wie mache ich das?
Aktualisieren
Per Skaffmans Vorschlag habe ich die Bean in eine SharedBeans.xml-Datei verschoben und in meine applicationContext.xml importiert. Dies verursacht jedoch eine SAXParser-Ausnahme:
%Vor%Ich kann nicht sicher sein, was ich falsch mache. Die Bean funktionierte gut in meiner Kontextdatei, und alles, was ich tat, wurde ausgeschnitten und in die neue Datei eingefügt. Hier sind die Inhalte von SharedBeans.xml in ihrer Gesamtheit:
%Vor%Dies erscheint mir nicht als besonders guter Anwendungsfall für einen übergeordneten Kontext, der hauptsächlich dazu dient, eine Hierarchie einzurichten (z. B. einen Stamm-Webapp-Kontext, mehrere untergeordnete Servlet-Kontexte).
Für Ihre Situation wird es einfacher und einfacher zu verstehen, wenn Sie nur die allgemeinen Bean-Definitionen in eine separate Datei extrahieren und dann <import>
sie in jede Kontextdatei, die sie benötigt. Sie könnten das mit Eltern-Kind-Kontexten machen, aber es wird unnötig schwerer zu verstehen sein.
OK, also ein Beispiel, fügen Sie Ihre Definition für gemeinsam genutzte Beans in eine Datei namens shared-beans.xml
ein und legen Sie sie (vorerst) auf die oberste Ebene Ihres Klassenpfads und enthalten:
Fügen Sie in applicationContext-test.xml
und /WEB-INF/classes/applicationContext.xml
Folgendes hinzu:
Alle Bean-Definitionen in shared-beans.xml
werden jetzt in jeden App-Kontext importiert. Sie erhalten dadurch keinen dritten App-Kontext, Sie importieren einfach die Bean-Definitionen aus einer anderen Datei.
Sie können Ihre allgemeine Deklaration in die separate XML-Datei verschieben und in den Klassenpfad einfügen (für einen einfachen Zugriff von test). Dann können Sie Folgendes tun:
%Vor%.
%Vor% Sie können common-beans.xml
auch aus beiden Kontexten mit <import>
einfügen, wie von skaffman vorgeschlagen.
Tags und Links spring