比纯名称更有趣的是如何拆分文件(并为每个部分命名)。
如果您有一个没有测试的独立或 Web 应用程序,那么您可以将所有配置放在一个文件中。 - 但是没有测试不应该是一种意见。
假设您有一个带有测试的 Web 应用程序。
然后您应该将配置拆分为两个文件,一个用于纯 java(没有 web suff)配置,另一个包含 WEB 应用程序的所有其他内容。
我个人更喜欢将其命名为 applicationContext.xml 和 webmvc-config.xml。
Web 配置文件的默认名称(如果没有为 Dispatcher Servlet 指定)将是 /WEB-INF/<servletname>-servlet.xml)
我在classpath:/META-INF/spring 目录中找到了applicationContext.xml,在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 一起加载,而 webmvc-config.xml 由 Dispatacher Servlet 加载。 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 用于没有与测试不同的数据库内容的核心内容
-
applicationContext-db.xml 用于生产数据库配置(例如用于数据库连接的 jndi-lookup 和用于 MySql 的 LocalContainerEntityManagerFactoryBean)
(现在你了解了web.xml中contextConfigLocation的模式)
对于测试,您现在需要两个文件(您可以将其写入一个文件,但我更喜欢两个)。
* testContext-h2DbConfig.xml applicationContext-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
如果您的 spring 配置有其他方面,测试和生产配置不同(例如调度程序),那么您可以以相同的方式拆分它。
我希望您了解拆分、命名约定和位置如何协同工作。