5.4.The ResourceLoader

优质
小牛编辑
129浏览
2023-12-01

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");

下面的表格概述了 StringResource 的转换规则:

表 5.1. Resource strings

PrefixExampleExplanation

classpath:

classpath:com/myapp/config.xml

Loaded from the classpath.

file:

file:/data/config.xml

Loaded as a URL, from the filesystem. [a]

http:

http://myserver/logo.png

Loaded as a URL.

(none)

/data/config.xml

Depends on the underlying ApplicationContext.

[a] But see also the section entitled 第 5.7.3 节 “ FileSystemResource 提示”.