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