Spring Resource: интерфейс ResourceLoader

Интерфейс ResourceLoader предназначен для реализации объектами, которые могут возвращать (то есть загружать) экземпляры Resource. В следующем листинге показано определение интерфейса ResourceLoader:

Java

public interface ResourceLoader {

    Resource getResource(String location);
}

Kotlin

interface ResourceLoader {

    fun getResource(location: String): Resource
}

Все контексты приложения реализуют интерфейс ResourceLoader. Следовательно, все контексты приложения могут использоваться для получения экземпляров ресурса.

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

Java

Resource template = ctx.getResource("some/resource/path/myTemplate.txt");

Kotlin

val template = ctx.getResource("some/resource/path/myTemplate.txt")

В отношении ClassPathXmlApplicationContext этот код возвращает ClassPathResource. Если тот же метод был запущен для экземпляра FileSystemXmlApplicationContext, он вернул бы FileSystemResource. Для WebApplicationContext он вернет ServletContextResource. Аналогичным образом он будет возвращать соответствующие объекты для каждого контекста.

В результате вы можете загружать ресурсы способом, соответствующим контексту конкретного приложения.

С другой стороны, вы также можете принудительно использовать ClassPathResource, независимо от типа контекста приложения, указав специальный префикс classpath:, как показано в следующем примере:

Java

Resource template = ctx.getResource("classpath:some/resource/path/myTemplate.txt");

Kotlin

val template = ctx.getResource("classpath:some/resource/path/myTemplate.txt")

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

Java

Resource template = ctx.getResource("file:///some/resource/path/myTemplate.txt");

Kotlin

val template = ctx.getResource("file:///some/resource/path/myTemplate.txt")

Java

Resource template = ctx.getResource("https://myhost.com/resource/path/myTemplate.txt");

Kotlin

val template = ctx.getResource("https://myhost.com/resource/path/myTemplate.txt")

В следующей таблице обобщена стратегия преобразования объектов String в объекты Resource:

Префикс Пример Объяснение
classpath:
classpath:com/myapp/config.xml
Загружен из пути к классам.
file: file:///data/config.xml Загружается как URL-адрес из файловой системы.
http: https://myserver/logo.png Загружен как URL.
(нет) /data/config.xml Зависит от базового ApplicationContext.

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


Комментарии

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

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

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

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