Spring Resource: встроенные реализации Resource

UrlResource

UrlResource является оболочкой для java.net.URL и может использоваться для доступа к любому объекту, который обычно доступен с помощью URL, например к файлам, цели HTTP, цели FTP и т. д. Все URL-адреса имеют стандартизованное строковое представление, так что соответствующие стандартизированные префиксы используются для обозначения одного типа URL-адреса другим. Сюда входят file: для доступа к путям файловой системы, http: для доступа к ресурсам по протоколу HTTP, ftp: для доступа к ресурсам через FTP и другие.

UrlResource создается кодом Java путем явного использования конструктора UrlResource, но часто создается неявно, когда вы вызываете метод API, который принимает аргумент String, предназначенный для представления пути. В последнем случае PropertyEditor JavaBeans в конечном итоге решает, какой тип ресурса создать. Если строка пути содержит хорошо известный (то есть, для PropertyEditor) префикс (например, classpath:), PropertyEditor создает соответствующий специализированный ресурс для этого префикса. Однако, если PropertyEditor не распознает префикс, он предполагает, что строка является стандартной строкой URL-адреса, и создает UrlResource.

ClassPathResource

Этот класс представляет ресурс, который должен быть получен из пути к классам. Он использует либо загрузчик класса контекста потока, либо данный загрузчик классов, либо данный класс для загрузки ресурсов.

Эта реализация ресурса поддерживает разрешение как java.io.File, если ресурс пути к классу находится в файловой системе, но не для ресурсов пути к классам, которые находятся в jar и не были расширены (механизмом сервлета или другой средой) в файловую систему . Чтобы решить эту проблему, различные реализации ресурсов всегда поддерживают разрешение в виде java.net.URL.

ClassPathResource создается кодом Java путем явного использования конструктора ClassPathResource, но часто создается неявно, когда вы вызываете метод API, который принимает аргумент String, предназначенный для представления пути. В последнем случае PropertyEditor JavaBeans распознает специальный префикс classpath: в строковом пути и в этом случае создает ClassPathResource.

FileSystemResource

Это реализация ресурсов для обработчиков java.io.File и java.nio.file.Path. Он поддерживает разрешение в виде файла и URL-адреса.

ServletContextResource

Это реализация Resource для ресурсов ServletContext, которая интерпретирует относительные пути в корневом каталоге соответствующего веб-приложения.

Он всегда поддерживает потоковый доступ и доступ по URL-адресу, но разрешает доступ к java.io.File только тогда, когда архив веб-приложения расширен и ресурс физически находится в файловой системе. Независимо от того, расширен ли он и в файловой системе, или доступен ли он непосредственно из JAR или где-то еще, например, в базе данных (что возможно), на самом деле зависит от контейнера сервлета.

InputStreamResource

InputStreamResource - это реализация ресурса для заданного InputStream. Его следует использовать только в том случае, если конкретная реализация ресурса не применима. В частности, по возможности предпочитайте ByteArrayResource или любую из файловых реализаций ресурсов.

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

ByteArrayResource

Это реализация ресурса для данного байтового массива. Он создает ByteArrayInputStream для заданного массива байтов.

Это полезно для загрузки содержимого из любого заданного массива байтов без необходимости использования одноразового InputStreamResource.


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


Комментарии

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

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

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

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