Інтерфейс ResourceLoader призначений для реалізації об'єктами, які можуть повертати (тобто завантажувати) екземпляри Resource. У наступному лістингу показано визначення інтерфейсу ResourceLoader:

public interface ResourceLoader {
    Resource getResource(String location);
    ClassLoader getClassLoader();
}

Всі контексти програм реалізують інтерфейс ResourceLoader. Тому всі контексти програм можна використовувати для отримання екземплярів Resource.

Якщо ти викликаєш getResource() для певного контексту програми, а вказаний шлях розташування не матиме певного префікса, то отримаєш назад тип Resource, який відповідає конкретному контексту програми. Наприклад, припустимо, що наступний фрагмент коду запустився для екземпляра 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 та https:

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:

Таблиця 10. Рядки ресурсів
Префікс Приклад Пояснення

classpath:

classpath:com/myapp/config.xml

Завантажується з класів.

file:

file:///data/config.xml

Завантажується як URL із файлової системи.

https:

https://myserver/logo.png

Завантажується як URL.

(none)

/data/config.xml

Залежить від базового інтерфейсу ApplicationContext.