Я обнаружил, что использую два идентичных bean-компонента в моем applicationContext.xml и моем applicationContext-test.xml. Я бы хотел, чтобы мой тестовый контекст мог наследоваться от моего контекста приложения, чтобы не повторяться.
Я ' Мы видели много материала, показывающего, что вы можете объявить родительский контекст приложения и ссылаться на bean-компоненты из этого контекста, но я не могу найти полезного примера. Кто-нибудь может помочь?
Обновление В качестве некоторой справочной информации, мой обычный контекст приложения загружается в 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>
Контекст моего тестового приложения загружен в мои модульные тесты:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/applicationContext-test.xml")
Итак, допустим, у меня есть компонент в моем обычном контексте:
<bean name="someBean" class="com.foo.MyClass" />
Затем в контексте моего тестового приложения я хотел бы сослаться на этот bean-компонент. Как мне это сделать?
Обновление
По предложению скаффмана, я переместил компонент в файл SharedBeans.xml и импортировал его в свой applicationContext.xml. Однако это вызывает исключение 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)
Я не могу быть уверен, что делаю неправильно. Компонент работал нормально в моем файле контекста, и все, что я сделал, это вырезал и вставил в новый файл. Вот полное содержимое SharedBeans.xml:
<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>