Spring Resource: контексты приложения и пути ресурсов, создание контекстов приложения

Конструктор контекста приложения (для определенного типа контекста приложения) обычно принимает строку или массив строк в качестве путей расположения ресурсов, таких как файлы XML, составляющие определение контекста.

Когда такой путь местоположения не имеет префикса, конкретный тип ресурса, созданный на основе этого пути и используемый для загрузки определений компонентов, зависит от контекста конкретного приложения и соответствует ему. Например, рассмотрим следующий пример, который создает ClassPathXmlApplicationContext:

Java

ApplicationContext ctx = new ClassPathXmlApplicationContext("conf/appContext.xml");

Kotlin

val ctx = ClassPathXmlApplicationContext("conf/appContext.xml")

Определения bean-компонентов загружаются из пути к классам, поскольку используется ClassPathResource. Однако рассмотрим следующий пример, в котором создается FileSystemXmlApplicationContext:

Java

ApplicationContext ctx =
    new FileSystemXmlApplicationContext("conf/appContext.xml");

Kotlin

val ctx = FileSystemXmlApplicationContext("conf/appContext.xml")

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

Обратите внимание, что использование специального префикса пути к классам или стандартного префикса URL-адреса в пути местоположения переопределяет тип ресурса по умолчанию, созданный для загрузки определения. Рассмотрим следующий пример:

Java

ApplicationContext ctx =
    new FileSystemXmlApplicationContext("classpath:conf/appContext.xml");

Kotlin

val ctx = FileSystemXmlApplicationContext("classpath:conf/appContext.xml")

Использование FileSystemXmlApplicationContext загружает определения bean-компонентов из пути к классам. Однако это по-прежнему FileSystemXmlApplicationContext. Если впоследствии он используется как ResourceLoader, любые пути без префикса по-прежнему рассматриваются как пути файловой системы.

Создание экземпляров ClassPathXmlApplicationContext

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

Рассмотрим следующий макет каталога:

com/
  foo/
    services.xml
    daos.xml
    MessengerService.class

В следующем примере показано, как можно создать экземпляр ClassPathXmlApplicationContext, состоящий из bean-компонентов, определенных в файлах с именами services.xml и daos.xml (которые находятся в пути к классам):

Java

ApplicationContext ctx = new ClassPathXmlApplicationContext(
    new String[] {"services.xml", "daos.xml"}, MessengerService.class);

Kotlin

val ctx = ClassPathXmlApplicationContext(arrayOf("services.xml", "daos.xml"), MessengerService::class.java)


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


Комментарии

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

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

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

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