Spring之ResourceLoader加载资源

Posted 卢艳亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring之ResourceLoader加载资源相关的知识,希望对你有一定的参考价值。

Resource与ResourceLoader对比

1、Resource接口定义了应用访问底层资源的能力。

  • 通过FileSystemResource以文件系统绝对路径的方式进行访问;
  • 通过ClassPathResource以类路径的方式进行访问;
  • 通过ServletContextResource以相对于Web应用根目录的方式进行访问。

  在获取资源后,用户就可以通过Resource接口定义的多个方法访问文件的数据和其他的信息:如可以通过getFileName()获取文件名,通过getFile()获取资源对应的File对象,通过getInputStream()直接获取文件的输入流。此外,还可以通过createRelative(String relativePath)在资源相对地址上创建新的文件。

2、ResourceLoader接口提供了一个加载文件的策略。它提供了一个默认的实现类DefaultResourceLoader,获取资源代码如下:

 1 @Override
 2 public Resource getResource(String location) {
 3     Assert.notNull(location, "Location must not be null");
 4     if (location.startsWith("/")) {
 5         return getResourceByPath(location);
 6     }
 7     else if (location.startsWith(CLASSPATH_URL_PREFIX)) {
 8         return new ClassPathResource(location.substring(CLASSPATH_URL_PREFIX.length()), getClassLoader());
 9     }
10     else {
11         try {
12             // Try to parse the location as a URL...
13             URL url = new URL(location);
14             return new UrlResource(url);
15         }
16         catch (MalformedURLException ex) {
17             // No URL -> resolve as resource path.
18             return getResourceByPath(location);
19         }
20     }
21 }

 

1 protected Resource getResourceByPath(String path) {
2     return new ClassPathContextResource(path, getClassLoader());
3 }

 

以上是关于Spring之ResourceLoader加载资源的主要内容,如果未能解决你的问题,请参考以下文章

Spring之ResourceLoader加载资源

Spring之ResourceLoader

SPRING04_核心组件接口分析Resource具体实现类ResourceLoader资源读取器及策略模式

Spring引导资源getFile()不起作用[重复]

Spring复杂的BeanFactory继承体系该如何理解?---中下

Spring Resource接口获取资源