Spring Resource: ресурсы как зависимости
Если сам bean-компонент будет определять и предоставлять путь к ресурсам посредством какого-то динамического процесса, для него, вероятно, имеет смысл использовать интерфейс ResourceLoader для загрузки ресурсов. Например, рассмотрим загрузку какого-либо шаблона, в котором конкретный необходимый ресурс зависит от роли пользователя. Если ресурсы статичны, имеет смысл полностью исключить использование интерфейса ResourceLoader, сделать так, чтобы bean-компонент раскрыл необходимые ему свойства ресурса и ожидал, что они будут внедрены в него.
Последующее внедрение этих свойств делает тривиальным то, что все контексты приложения регистрируются и используют специальный JavaBeans PropertyEditor, который может преобразовывать String paths в Resource объекты. Итак, если myBean имеет свойство template типа Resource, его можно настроить с помощью простой строки для этого ресурса, как показано в следующем примере:
<bean id="myBean" class="...">
<property name="template" value="some/resource/path/myTemplate.txt"/>
</bean>
Обратите внимание, что путь к ресурсу не имеет префикса. Следовательно, поскольку сам контекст приложения будет использоваться в качестве ResourceLoader, сам ресурс загружается через ClassPathResource, FileSystemResource или ServletContextResource, в зависимости от точного типа контекста.
Если вам нужно принудительно использовать определенный тип ресурса, вы можете использовать префикс. В следующих двух примерах показано, как принудительно использовать ClassPathResource и UrlResource (последний используется для доступа к файлу файловой системы):
<property name="template" value="classpath:some/resource/path/myTemplate.txt">
<property name="template" value="file:///some/resource/path/myTemplate.txt"/>
Читайте также:
- Spring Resource: интерфейс ResourceLoaderAware
- Spring Resource: встроенные реализации Resource
- Spring Resource: интерфейс ResourceLoader
Комментарии
Отправить комментарий