Інтерфейс 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) |
|
Залежить від базового інтерфейсу |
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ