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. |
Читайте также:
- Spring Resource
- Spring Resource: встроенные реализации Resource
- Spring IoC контейнер: BeanFactory или ApplicationContext
Комментарии
Отправить комментарий