4.6 Resources as dependencies
如果bean本身要通过某种动态过程来确定和提供资源路径,那么bean使用ResourceLoader接口来加载资源就变得有意义了。 假如加载某种类型的模板,其中所需的特定资源取决于用户的角色。 如果资源是静态的,那么完全可以舍弃不用ResourceLoader
接口,只需让bean暴露它需要的Resource
属性,并按照预期注入属性即可。
是什么使得注入这些属性变得如此简单,是因为所有应用程序上下文注册和使用一个特殊的JavaBean的PropertyEditor
,它可以将String
paths转换为Resource
对象。 因此,如果myBean
有一个类型为Resource的模板属性,它可以用一个简单的字符串配置该资源,如下所示:
<bean id="myBean" class="...">
<property name="template" value="some/resource/path/myTemplate.txt"/>
</bean>
需要注意的是,资源路径没有前缀,因为应用程序上下文本身将被作为 ResourceLoader
来使用,资源本身将通过ClassPathResource
,FileSystemResource
或ServletContextResource
(视情况而定)来加载, 这取决于上下文的确切类型。
如果需要强制使用特定的Resource
类型,则可以使用前缀。 以下两个示例显示如何强制使用ClassPathResource
和UrlResource
(后者用于访问文件系统文件)。
<property name="template" value="classpath:some/resource/path/myTemplate.txt">
<property name="template" value="file:///some/resource/path/myTemplate.txt"/>