我发现在我的applicationContext.xml和applicationContext-test.xml中使用了两个相同的bean。我希望我的测试环境可以继承我的应用程序上下文,以避免重复代码。
我看到很多资料表明可以声明一个父应用程序上下文并引用该上下文中的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:
<bean name="someBean" class="com.foo.MyClass" />
那么,在我的测试应用程序上下文中,我想引用这个bean。我该怎么做?
更新
根据skaffman的建议,我将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)
我不确定我做错了什么。在我的上下文文件中,这个bean工作得很好,而我所做的一切就是将其剪切并粘贴到新文件中。以下是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>
<beans>
顶级元素... - skaffman