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)
Читайте также:
- Spring Resource: интерфейс ResourceLoaderAware
- Spring Resource: ресурсы как зависимости
- Spring Resource: интерфейс ResourceLoader
Комментарии
Отправить комментарий