Интерфейс 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
.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ