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

public interface ResourceLoader {
    Resource getResource(String location);
    ClassLoader getClassLoader();
}

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

Если вы вызовете getResource() для определенного контекста приложения, а указанный путь расположения не будет иметь определенного префикса, то получите обратно тип Resource, соответствующий данному конкретному контексту приложения. Например, предположим, что следующий фрагмент кода был запущен для экземпляра 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 и https:

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:

Таблица 10. Строки ресурсов
Префикс Пример Пояснение

classpath:

classpath:com/myapp/config.xml

Загружается из пути классов.

file:

file:///data/config.xml

Загружается как URL из файловой системы..

https:

https://myserver/logo.png

Загружается как URL.

(none)

/data/config.xml

Зависит от базового интерфейса ApplicationContext.