Интерфейс ResourceLoader
предназначен для реализации объектами, которые могут возвращать (то есть загружать) экземпляры Resource
. В следующем листинге показано определение интерфейса ResourceLoader
:
public interface ResourceLoader {
Resource getResource(String location);
ClassLoader getClassLoader();
}
Все контексты приложений реализуют интерфейс ResourceLoader
. Поэтому все контексты приложений можно использовать для получения экземпляров Resource
.
Если вы вызовете getResource()
для определенного контекста приложения, а указанный путь расположения не будет иметь определенного префикса, то получите обратно тип Resource
, соответствующий данному конкретному контексту приложения. Например, предположим, что следующий фрагмент кода был запущен для экземпляра ClassPathXmlApplicationContext
:
Resource template = ctx.getResource("some/resource/path/myTemplate.txt");
val template = ctx.getResource("some/resource/path/myTemplate.txt")
Для ClassPathXmlApplicationContext
этот код возвращает ClassPathResource
. Если бы тот же метод был запущен для экземпляра FileSystemXmlApplicationContext
, он бы вернул FileSystemResource
. Для WebApplicationContext
он возвращает ServletContextResource
. Аналогичным образом он будет возвращать соответствующие объекты для каждого контекста.
В результате становится возможно загружать ресурсы в соответствии с конкретным контекстом приложения.
С другой стороны, можно также принудительно использовать ClassPathResource
независимо от типа контекста приложения, указав специальный префикс classpath:
, как показано в следующем примере:
Resource template = ctx.getResource("classpath:some/resource/path/myTemplate.txt");
val template = ctx.getResource("classpath:some/resource/path/myTemplate.txt")
Точно так же вы можете принудительно использовать UrlResource
, указав любой из стандартных префиксов java.net.URL
. В следующих примерах используются префиксы file
и https
:
Resource template = ctx.getResource("file:///some/resource/path/myTemplate.txt");
val template = ctx.getResource("file:///some/resource/path/myTemplate.txt")
Resource template = ctx.getResource("https://myhost.com/resource/path/myTemplate.txt");
val template = ctx.getResource("https://myhost.com/resource/path/myTemplate.txt")
В следующей таблице кратко описана стратегия преобразования объектов String
в объекты Resource
:
Префикс | Пример | Пояснение |
---|---|---|
classpath: |
|
Загружается из пути классов. |
file: |
|
Загружается как |
https: |
|
Загружается как |
(none) |
|
Зависит от базового интерфейса |