如果您有独立或Web应用程序进行测试,那么您可以将所有配置放在一个文件中。 – 但没有测试不应该是一个意见。
让我们假设你有一个web应用程序有测试。
那么你应该将配置分成两个文件,一个用于纯java(没有web的)配置,另一个包含WEB应用程序的所有其他东西。
我将其命名为applicationContext.xml和webmvc-config.xml。
Web配置文件的默认名称(如果没有为Dispatcher Servlet指定)将是/WEB-INF/\u0026lt;servletname\u0026gt;-servlet.xml)
我在classpath中找到applicationContext.xml:/ Meta-INF / spring目录和WEB-INF / spring中的webmvc-config.xml。那个地方是Spring Roo的风格。它工作,但每一个其他文件夹也将工作。因为我使用maven文件的确切位置是:
> /src/main/resources/Meta-INF/spring/applicationContext.xml
> /src/main/webapp/WEB-INF/spring/webmvc-config.xml
核心的applicationContext.xml加载了org.springframework.web.context.ContextLoaderListener和Dispatacher Servlet的webmvc-config.xml。 web.xml中:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:Meta-INF/spring/applicationContext*.xml</param-value> </context-param> <!-- Creates the Spring Container shared by all Servlets and Filters --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>CFMA-SpringProject</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/webmvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
现在,您开始为您的应用程序的业务逻辑编写测试,而无需加载所有的Web内容。但是在大多数情况下,这并不是最好的。例如,您希望使用Inmemory数据库运行一些快速测试,同时使用像MysqL这样的持久性数据库运行正常的应用程序(请不要怪我的那句话),或者您想在生产中使用jndi配置的数据库“正常”配置一个用于测试。所以你需要的是两种不同的配置。要写不是每一件事两次,最简单的方法是将applicationContext.xml分成两个文件:
> applicationContext.xml为核心的东西,没有db的东西,不同于测试
> applicationContext-db.xml用于生产性数据库配置(例如,用于db连接的jndi-lookup和MysqL的LocalContainerEntityManagerfactorybean)
(现在您了解web.xml中的contextConfigLocation的模式)
对于测试,您现在需要两个文件(您可以在一个文件中写入,但我更喜欢两个)。
* testContext-h2DbConfig.xml作为testContext-db.xml的测试同级的文件,但是带有测试数据库并且没有jndi。
* textContext.xml这个文件在@ContextConfiguration引用的一个测试用例中。此文件仅包含导入测试所需的配置。在这种情况下,它是:
<import resource="classpath:/Meta-INF/spring/applicationContext.xml" /> <import resource="classpath:/Meta-INF/spring/testContext-h2DbConfig.xml" />
因为我使用spring,这两个文件都位于/src/test/resources/Meta-INF/spring/testContext.xml中
如果您有弹簧配置的其他方面,测试和生产配置在哪里不同(例如调度程序),则可以以相同的方式进行拆分。
我希望你了解分裂,命名约定和位置如何协同工作。