Me encuentro usando dos beans idénticos en mi applicationContext.xml y mi applicationContext-test.xml. Me gustaría que mi contexto de prueba pueda heredarse del contexto de mi aplicación, para evitar repetirlo.Cómo declarar un contexto de aplicación principal
He visto un montón de material que indica que puede declarar un contexto de aplicación padre y beans de referencia de ese contexto, pero no puedo encontrar un ejemplo útil. ¿Alguien puede ayudar?
actualización Como algo de información de antecedentes, mi contexto normal de aplicación se carga en web.xml:
<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>
Mi contexto de aplicación de prueba se carga en mis pruebas de unidad:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/applicationContext-test.xml")
Entonces digamos que tengo un frijol en mi contexto habitual:
<bean name="someBean" class="com.foo.MyClass" />
Luego, en el contexto de mi aplicación de prueba, me gustaría referirme a este bean. ¿Cómo lo hago?
actualización
Por sugerencia de skaffman, me he movido el grano en un archivo SharedBeans.xml e importado en mi applicationContext.xml. Sin embargo, esto provoca una excepción SAXParser:
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)
no puedo estar seguro de lo que estoy haciendo mal. El bean estaba funcionando bien en mi archivo de contexto, y todo lo que hice fue cortar y pegar en el nuevo archivo. Éstos son los contenidos de SharedBeans.xml en su totalidad:
<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>
Depende de cómo haya configurado las cosas. Por favor, da un ejemplo de tu uso de tus contextos. – skaffman
@skaffman: Pregunta actualizada. Ejemplos apreciados – Samo
Aún necesita el elemento de nivel superior '' .... –
skaffman