Обзор контейнера IoC Spring, создание контейнера: составление метаданных конфигурации на основе XML

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

Вы можете использовать конструктор контекста приложения для загрузки определений бинов из всех этих фрагментов XML. Этот конструктор занимает несколько расположений ресурсов. Или используйте одно или несколько вхождений элемента <import/> для загрузки определений бина из другого файла или файлов. В следующем примере показано, как это сделать:

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

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

В предыдущем примере определения внешних компонентов загружаются из трех файлов: services.xml, messageSource.xml и themeSource.xml. Все пути расположения относятся к файлу определения, выполняющему импорт, поэтому services.xml должен находиться в том же каталоге или в каталоге пути к классу, что и файл, выполняющий импорт, тогда как messageSource.xml и themeSource.xml должны находиться в расположении ресурсов ниже расположения импортирующего файла. Как видите, ведущий слеш игнорируется. Однако, учитывая, что эти пути относительны, лучше не использовать косую черту вообще. Содержимое импортируемых файлов, включая элемент <beans/> верхнего уровня, должно быть допустимым определением XML-бина, согласно схеме Spring.

Можно, но не рекомендуется, ссылаться на файлы в родительских каталогах, используя относительный путь "../". Это создает зависимость от файла, который находится за пределами текущего приложения. В частности, эта ссылка не рекомендуется для URL-адресов classpath: (например, classpath:../services.xml), где процесс разрешения во время выполнения выбирает "ближайший" корень пути к классу и затем просматривает его родительский каталог. Изменения конфигурации пути к классам могут привести к выбору другого неправильного каталога.

Вы всегда можете использовать полностью определенные расположения ресурсов вместо относительных путей: например, файл: C:/config/services.xml или classpath:/config/services.xml. Однако имейте в виду, что вы связываете конфигурацию вашего приложения с определенными абсолютными местоположениями. Как правило, предпочтительно сохранять косвенность для таких абсолютных местоположений - например, через заполнители "${…​}", которые разрешаются в отношении свойств системы JVM во время выполнения.

Само пространство имен обеспечивает функцию директивы импорта. Дополнительные возможности конфигурации, помимо определения простых компонентов, доступны в ряде пространств имен XML, предоставляемых Spring - например, пространства имен context и util.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки