Інтерфейс ResourceLoaderAware
— це спеціальний інтерфейс зворотного виклику, що ідентифікує компоненти,
які приймають посилання на ResourceLoader
. У наступному лістингу показано визначення інтерфейсу ResourceLoaderAware
:
public interface ResourceLoaderAware {
void setResourceLoader(ResourceLoader resourceLoader);
}
Якщо клас реалізує ResourceLoaderAware
і розгортається в контексті програми (як керований бін Spring),
він розпізнається як ResourceLoaderAware
контекстом програми. Потім контекст програми звертається до
setResourceLoader(ResourceLoader)
, надаючи себе як аргумент (пам'ятай, що всі контексти додатків у
Spring реалізують інтерфейс ResourceLoader
).
Оскільки ApplicationContext
є ResourceLoader
, бін може також реалізувати інтерфейс ApplicationContextAware
і використовувати наданий контекст програми безпосередньо для завантаження ресурсів. Однак загалом краще
використовувати спеціалізований інтерфейс ResourceLoader
, якщо це все, що потрібно. Код буде пов'язаний
лише з інтерфейсом завантаження ресурсів (який можна вважати службовим інтерфейсом), а не з усім інтерфейсом Spring
ApplicationContext
.
У компонентах програми також можна покластися на автоматичне виявлення та зв'язування ResourceLoader
як
альтернативу реалізації інтерфейсу ResourceLoaderAware
. Традиційні режими автоматичного
виявлення та зв'язування constructor
та byType
здатні надавати ResourceLoader
або для аргументу конструктора, або, відповідно, для параметра сетера. Для більшої гнучкості (включно з можливістю
автоматичного виявлення та зв'язування полів і методів з кількома параметрами) розглянемо можливість використання
функцій автоматичного виявлення та зв'язування на основі анотацій. У цьому випадку ResourceLoader
автоматично виявляється і зв'язується з полем, аргументом конструктора або параметром методу, який очікує на тип
ResourceLoader
, якщо поле, конструктор або метод містять анотацію @Autowired
.
Resource
для шляху до
ресурсу, який містить знаки підстановки або використовує спеціальний префікс ресурсу classpath*:
замість ResourceLoader
з компонентами програми слід зв'язати екземпляр
ResourcePatternResolver
.