Інтерфейс 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.