如果bean自身希望通过一些动态方式决定和提供资源路径,那么让这个bean通过 ResourceLoader
接口去载入资源就很有意义了。考虑一个载入某类模板的例子,其中需要哪种特殊类型由用户的角色决定。
如果同时资源是静态的,完全不使用 ResourceLoader
接口很有意义,
这样只需让这些bean暴露所需的 Resource
属性,并保证他们会被注入。
让注入这些属性变得比较繁琐的原因是,所有的application context注册并使用了能把 String
路径变为 Resource
对象的特殊 PropertyEditor
JavaBeans。因此如果 myBean
有 Resource
类型的模板属性,
那它就能够使用简单的字符串配置该资源,如下所示:
bean id="myBean" class="..."> <property name="template" value="some/resource/path/myTemplate.txt"/> </bean>
可以看到资源路径没有前缀,因为application context本身要被作为 ResourceLoader
使用,这个资源会被载入为ClassPathResource
、
FileSystemResource
、
ServletContextResource
等等,这取决于context类型。
如果有必要强制使用特殊的 Resource
类型,那你就可以使用前缀。下面的两个例子说明了如何强制使用 ClassPathResource
和
UrlResource
(其中的第二个被用来访问文件系统中的文件)。
<property name="template" value="classpath:some/resource/path/myTemplate.txt">
<property name="template" value="file:/some/resource/path/myTemplate.txt"/>