Более интересно, чем чистое имя, как разделить файлы (и дать каждой части имя).
Если у вас есть автономное или веб-приложение без тестов, вы можете поместить всю конфигурацию в один файл. - Но отсутствие теста не должно быть мнением.
Предположим, у вас есть веб-приложение с тестами.
Затем вы должны разделить конфигурацию на два файла, один для конфигурации с чистой Java (без веб-суффикса), а другой содержит все остальные компоненты для веб-приложения.
Лично я предпочитаю называть его applicationContext.xml и webmvc-config.xml.
Имя по умолчанию для файла веб-конфигурации (если не указано для сервлета-диспетчера) будет /WEB-INF/<servletname>-servlet.xml
)
Я нахожу файл applicationContext.xml в каталоге classpath:/META-INF/spring
и файл webmvc-config.xml в WEB-INF/spring
. Это место в стиле 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. 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>
Теперь вы начинаете писать свои тесты для бизнес-логики вашего приложения без загрузки всего веб-контента. Но в большинстве случаев это не достаточно. Например, вы хотите запустить несколько быстрых тестов с базой данных Inmemory, в то время как вы запускаете обычное приложение с постоянной базой данных, такой как MySql (, пожалуйста, не вините меня за это предложение ), или вы хотите использовать jndi настроил БД в производстве и "нормальный" настроил для тестов. Так что вам нужно две разные конфигурации. Чтобы написать не все дважды, проще всего разбить applicationContext.xml
на два файла:
applicationContext.xml
для ядра без дБ, что отличается от тестов
applicationContext-db.xml
для производительной конфигурации БД (например, jndi-lookup для соединения БД и LocalContainerEntityManagerFactoryBean для MySql)
( Теперь вы понимаете шаблон contextConfigLocation
в web.xml )
Для тестов вам теперь нужно два файла (вы можете записать его в один файл, но я предпочитаю два).
* 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
Если у вас есть другие аспекты конфигурации пружин, в которых тестовая и производительная конфигурации отличаются (например, планировщики), то вы можете разделить их таким же образом.
Надеюсь, вы понимаете, как разделение, соглашение об именах и расположение работают вместе.