Ich finde mich zwei identische Beans in meiner applicationContext.xml und meine applicationContext-test.xml. Ich möchte, dass mein Testkontext von meinem App-Kontext erben kann, damit ich mich nicht wiederhole.So deklarieren Sie einen übergeordneten Anwendungskontext
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?
Kontext in meinen Unit-Tests geladen wird<context-param>
<description>Application Contexts for Spring</description>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
Meine Testanwendung:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/applicationContext-test.xml")
aktualisieren Da einige Hintergrundinformationen, ist mein normaler Anwendungskontext in web.xml geladen Nehmen wir an, ich habe eine Bean in meinem regulären Kontext:
<bean name="someBean" class="com.foo.MyClass" />
Dann möchte ich in meinem Testanwendungskontext auf diese Bohne verweisen. Wie mache ich es?
aktualisieren
Per skaffman Vorschlag habe ich die Bohne in eine SharedBeans.xml Datei verschoben und importiert sie in meine applicationContext.xml. Dies verursacht jedoch eine SAXParser Ausnahme:
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from URL location [classpath:SharedBeans.xml]
Offending resource: ServletContext resource [/WEB-INF/classes/applicationContext.xml]; nested exception is org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 1 in XML document from class path resource [SharedBeans.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'bean'.
at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
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 seiner Gesamtheit:
<bean name="properties" class="com.foo.Properties">
<constructor-arg><value>${module.name}</value></constructor-arg>
<constructor-arg><value>${businessUnit}</value></constructor-arg>
<constructor-arg><value>${product}</value></constructor-arg>
<constructor-arg><value>${env}</value></constructor-arg>
<constructor-arg><value>${machineName}</value></constructor-arg>
<constructor-arg><value>${collectionSet.company}</value></constructor-arg>
<constructor-arg><value>${route.tag}</value></constructor-arg>
<constructor-arg><value>${timeout}</value></constructor-arg>
</bean>
Es hängt davon ab, wie Sie die Dinge eingerichtet haben. Bitte geben Sie ein Beispiel für die Verwendung Ihrer Kontexte. – skaffman
@skaffman: Frage aktualisiert. Beispiele geschätzt. – Samo
Sie brauchen immer noch die '' Top-Level-Element .... –
skaffman