5.4.The ResourceLoader
5.4. The ResourceLoader
ResourceLoader
接口由能返回(或者载入)Resource
实例的对象来实现。
public interface ResourceLoader { Resource getResource(String location); }
所有的application context都实现了 ResourceLoader
接口, 因此它们可以用来获取Resource
实例。
当你调用特定application context的 getResource()
方法, 而且资源路径并没有特定的前缀时,你将获得与该application context相应的 Resource
类型。例如:假定下面的代码片断是基于ClassPathXmlApplicationContext
实例上执行的:
Resource template = ctx.getResource("some/resource/path/myTemplate.txt");
这将返回ClassPathResource
;如果是基于FileSystemXmlApplicationContext
实例上执行的,那你将获得FileSystemResource
。而对于 WebApplicationContext
你将获得ServletContextResource
,依此类推。
这样你可以在特定的application context中用流行的方法载入资源。
另一方面,无论什么类型的application context, 你可以通过使用特定的前缀 classpath:
强制使用ClassPathResource
。
Resource template = ctx.getResource("classpath:some/resource/path/myTemplate.txt");
同样的,你可以用任何标准的 java.net.URL
前缀,强制使用 UrlResource
:
Resource template = ctx.getResource("file:/some/resource/path/myTemplate.txt");
Resource template = ctx.getResource("http://myhost.com/resource/path/myTemplate.txt");
下面的表格概述了 String
到 Resource
的转换规则:
表 5.1. Resource strings
Prefix | Example | Explanation |
---|---|---|
classpath: |
| Loaded from the classpath. |
file: |
| Loaded as a |
http: |
| Loaded as a |
(none) |
| Depends on the underlying |
[a] But see also the section entitled 第 5.7.3 节 “ |