Могу ли я составить конфигурационный файл Spring из файлов меньшего размера?

StackOverflow https://stackoverflow.com/questions/94542

  •  01-07-2019
  •  | 
  •  

Вопрос

У меня есть несколько проектов, которые все используют один проект для модели данных.У каждого из этих проектов есть свой собственный applicationContext.xml файл с кучей повторяющихся данных внутри.

Я бы хотел иметь файл modelContext.xml и еще один для моего ui.xml и т.д.

Могу ли я это сделать?

Это было полезно?

Решение

Из самого Spring Docs (версия 2.5.5, раздел 3.2.2.1.):

Часто бывает полезно разделить определения контейнеров на несколько XML-файлов.Один из способов затем загрузить контекст приложения, который сконфигурирован из всех этих фрагментов XML , заключается в использовании конструктора контекста приложения , который принимает несколько местоположений ресурсов.С помощью bean factory средство чтения определений bean можно использовать несколько раз для чтения определений из каждого файла по очереди.

Как правило, команда Spring предпочитает описанный выше подход, поскольку он сохраняет файлы конфигурации контейнера в неведении о том факте, что они объединяются с другими.Альтернативный подход заключается в использовании одного или нескольких вхождений элемента для загрузки определений компонента из другого файла (или файлов).Давайте посмотрим на пример:

<import resource="services.xml"/>
<import resource="resources/messageSource.xml"/>
<import resource="/resources/themeSource.xml"/>

<bean id="bean1" class="..."/>
<bean id="bean2" class="..."/>

В этом примере определения внешнего компонента загружаются из 3 файлов, services.xml , MessageSource.xml и themeSource.xml.Все пути расположения рассматриваются относительно файла определения , выполняющего импорт, поэтому services.xml в этом случае он должен находиться в том же каталоге или пути к классу , что и файл, выполняющий импорт, в то время как messageSource.xml и themeSource.xml должен находиться в файле resources расположение под местоположением файла для импорта .Как вы можете видеть, начальная косая черта фактически игнорируется, но учитывая, что они считаются относительными путями, вероятно, будет лучше вообще не использовать косую черту. Содержимое импортируемых файлов должно быть допустимым определением компонента XML файлы в соответствии со схемой Spring или DTD, включая элемент верхнего уровня .

Другие советы

Мы делаем это в наших проектах на работе, используя загрузчик ресурсов classpath* весной.Для определенного приложения будут загружены все файлы appcontext, содержащие идентификатор приложения:

classpath*:springconfig/spring-appname-*.xml

Да, вы можете сделать это с помощью элемента import.

<import resource="services.xml"/>

Атрибут ресурса каждого элемента является допустимым путем (например,classpath:foo.xml )

Учитывая то, на что указал мне Николас, я нашел это в документах.Это позволяет мне выбирать во время выполнения интересующие меня bean-контексты.

GenericApplicationContext ctx = new GenericApplicationContext();
XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(ctx);
xmlReader.loadBeanDefinitions(new ClassPathResource("modelContext.xml"));
xmlReader.loadBeanDefinitions(new ClassPathResource("uiContext.xml"));
ctx.refresh();

Вот что я сделал для одного из своих проектов.В вашем web.xml файл, вы можете определить файлы Spring bean, которые вы хотите использовать в своем приложении:

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
      /WEB-INF/applicationContext.xml
      /WEB-INF/modelContext.xml
      /WEB-INF/ui.xml
    </param-value>
  </context-param>

Если это не определено в вашем web.xml, он автоматически ищет /WEB-INF/applicationContext.xml

Еще одна вещь, которую следует отметить, - это то, что, хотя вы можете это сделать, если вы не большой поклонник XML, вы можете многое сделать в Spring 2.5 с аннотациями.

Да, вы можете использовать тег внутри бобового файла "Master".Но как насчет "почему"?Почему бы не перечислить файлы в параметре контекста contextConfigLocation массива местоположений wab.xml или als фабрики компонентов?

Я думаю, что с несколькими файлами намного проще обращаться.Вы можете выбрать только некоторые из них для тестирования, просто добавить, переименовать или удалить часть приложения, и вы можете связать разные приложения с одними и теми же конфигурационными файлами (веб-приложение и версию командной строки с некоторыми перекрывающимися определениями компонентов).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top