Интерфейс 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) |
|
Зависит от базового интерфейса |
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ