Могу ли я создать конфигурационный файл Spring из меньших? - PullRequest
15 голосов
/ 18 сентября 2008

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

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

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

Ответы [ 7 ]

19 голосов
/ 18 сентября 2008

Из документов Spring (v 2.5.5, раздел 3.2.2.1.) :

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

Обычно команда 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 должен находиться в ресурсах расположение под местоположением импорт файла. Как видите, ведущий слеш фактически игнорируется, но учитывая, что они считаются относительные пути, это, вероятно, лучше форма не использовать косую черту вообще. содержимое импортируемых файлов должно быть допустимым определением XML-бина файлы по схеме Spring или DTD, включая верхний уровень элемент.

3 голосов
/ 18 сентября 2008

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

classpath*:springconfig/spring-appname-*.xml
2 голосов
/ 18 сентября 2008

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

GenericApplicationContext ctx = new GenericApplicationContext();
XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(ctx);
xmlReader.loadBeanDefinitions(new ClassPathResource("modelContext.xml"));
xmlReader.loadBeanDefinitions(new ClassPathResource("uiContext.xml"));
ctx.refresh();
2 голосов
/ 18 сентября 2008

Да, вы можете сделать это через элемент импорта.

<import resource="services.xml"/>

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

1 голос
/ 18 сентября 2008

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

  <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

0 голосов
/ 20 сентября 2008

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

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

0 голосов
/ 19 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...