资源访问

1.Resource

  Jdk提供的访问资源的类并不能很好地满足各种底层的资源访问需求, 比如缺少从类路径或者web容器的上下文中获取资源的操作类. 鉴于此, Spring设计了一个Resource的接口.该接口拥有不同的实现类: ClassPathResource, FileSystemResource, UrlResource, ByteArrayResource, InputStreamResource, ServletContextResource.

  Resource接口中主要定义了以下几个方法:

  (1) boolean exists():  资源是否存在

  (2) boolean isOpen(): 是否是否打开

  (3) URL getURL() throws IOException: 如果底层资源可以表示成URL, 该方法返回对应的URL对象.

  (4) File getFile() throws IOException: 如果底层资源对应一个文件, 改方法返回对应的File对象.

  (5) InputStream getInputStream() throws IOException: 返回资源对应的输入流.

下面来了解下Resource的具体实现类:

  (1) ClassPathResource: 可用来获取类路径下的资源文件。假设我们有一个资源文件test.txt在类路径下,我们就可以通过给定对应资源文件在类路径下的路径path来获取它,new ClassPathResource(“test.txt”)。

(2) FileSystemResource:可用来获取文件系统里面的资源。我们可以通过对应资源文件的文件路径来构建一个FileSystemResource。FileSystemResource还可以往对应的资源文件里面写内容,当然前提是当前资源文件是可写的,这可以通过其isWritable()方法来判断。FileSystemResource对外开放了对应资源文件的输出流,可以通过getOutputStream()方法获取到。

(3) UrlResource: 可用来代表URL对应的资源,它对URL做了一个简单的封装。通过给定一个URL地址,我们就能构建一个UrlResource。

(4) ByteArrayResource: 是针对于字节数组封装的资源,它的构建需要一个字节数组。

(5) ServletContextResource: 是针对于ServletContext封装的资源,用于访问ServletContext环境下的资源。ServletContextResource持有一个ServletContext的引用,其底层是通过ServletContext的getResource()方法和getResourceAsStream()方法来获取资源的。

(6) InputStreamResource: 是针对于输入流封装的资源,它的构建需要一个输入流。

  为了能够访问不同类型的资源, 必须使用相应的Resource实现类, 这样是比较麻烦的, 能不能在不显示使用Resource的实现类的情况下, 仅通过资源地址的特殊标识就可以加载相应的资源呢?   Spring提供了一个强大的加载资源的机制, 不但能够通过"classpath:", "file:"等资源地址前缀识别不同的资源类型, 还支持Ant风格带通配符的资源地址.

  Spring 支持的资源地址前缀为: "classpath:", "file:", "http://", "ftp://".

  其中和"classpath"相对的还有另一个前缀: "classpath*:". 两者的区别是: 前者只会在第一个加载的包下寻找对应的类, 而后者则会在所有这些JAR包及类路径下寻找对应的类.

  Ant风格资源地址支持3种匹配符:

  ?: 匹配文件名中的一个字符.

  *:匹配文件名中的任意个字符.

  **:  匹配多层路径.

2.ResourceLoader

  Spring 定义了一套资源加载的接口, 并提供了实现类.

  ResourceLoader仅提供了一个getResource(String location)的方法, 可以根据一个资源地址加载文件资源, 不过, 资源地址只支持带资源类型前缀的表达式, 不支持Ant风格的资源路径表达式.  ResourcePatternResolver扩展了ResourceLoader接口,  定义了一个新的接口方法:  getResource(String locationPattern), 该方法支持带扩展类型前缀及Ant风格的资源路径表达式. PathMatchingResourcePatternResolver是spring提供的标准实现类.

Spring资源访问的更多相关文章

  1. spring资源访问接口和资源加载接口

    spring 资源访问接口 JDK提供的资源访问类,如java.net.URL.File等,不能很好地满足各种资源的访问需求,比如缺少从类路径或者Web容器的上下文中获取资源的操作类. 鉴于此,spr ...

  2. spring 资源访问

    spring 资源访问 Resource resource=null; //访问网络资源 resource=new UrlResource("file:bool.xml"); // ...

  3. 攻城狮在路上(贰) Spring(三)--- Spring 资源访问利器Resource接口

    Spring为了更好的满足各种底层资源的访问需求.设计了一个Resource接口,提供了更强的访问底层资源的能力.Spring框架使用Resource装载各种资源,包括配置文件资源.国际化属性文件资源 ...

  4. Spring资源访问接口Resource

    该接口拥有对不同资源类型的实现类 boolean exists() 资源是否存在 boolean isOpen() 资源是否打开 URL getURL() 如果底层资源可以表示成URL,则该方法返回对 ...

  5. 05.Spring 资源加载 - Resource

    基本概念 Spring 把所有能记录信息的载体,如各种类型的文件.二进制流等都称为资源. 对 Spring 开发者来说,最常用的资源就是 Spring 配置文件(通常是一份 XML 格式的文件). S ...

  6. Spring源码分析——资源访问利器Resource之实现类分析

    今天来分析Spring的资源接口Resource的各个实现类.关于它的接口和抽象类,参见上一篇博文——Spring源码分析——资源访问利器Resource之接口和抽象类分析 一.文件系统资源 File ...

  7. spring mvc官网下最新jar搭建框架-静态资源访问处理-注解-自动扫描

    1.从官网下载spring相关jar http://spring.io/projects 点击SPRING FRAMEWORK

  8. Spring MVC 使用介绍(十一)—— 跨域与静态资源访问

    一.跨域 服务端须在响应中添加相应响应头,从而允许跨域,具体可通过 public class CorsFilter extends OncePerRequestFilter { @Override p ...

  9. Spring Boot 静态资源访问原理解析

    一.前言 springboot配置静态资源方式是多种多样,接下来我会介绍其中几种方式,并解析一下其中的原理. 二.使用properties属性进行配置 应该说 spring.mvc.static-pa ...

随机推荐

  1. PostgreSQL中美元符号引用的字符串常量

    虽然用于指定字符串常量的标准语法通常都很方便,但是当字符串中包含了很多单引号或反斜线时很难理解它,因为每一个都需要被双写.要在这种情形下允许可读性更好的查询,PostgreSQL提供了另一种被称为“美 ...

  2. Leetcode: UTF-8 Validation

    A character in UTF8 can be from 1 to 4 bytes long, subjected to the following rules: For 1-byte char ...

  3. ASP.NET的一般处理程序对数据的基本操作

    TableList.ashx: <%@ WebHandler Language="C#" Class="TableList" %> using Sy ...

  4. [转]数据库高可用架构(MySQL、Oracle、MongoDB、Redis)

    一.MySQL   MySQL小型高可用架构 方案:MySQL双主.主从 + Keepalived主从自动切换 服务器资源:两台PC Server 优点:架构简单,节省资源 缺点:无法线性扩展,主从失 ...

  5. PHP-字符串过长不用担心

    字符串过长可以用定界符: >>>GOD ................巨长务必的字符串 GOD;

  6. Could not create the view: An unexpected exception was thrown.如何解决

    今天打开Myeclipse10的时候,发现server窗口出现一堆问题,问题如标题,然后下方出现了一堆java.lang.NullPointerException的问题. java.lang.Null ...

  7. windows系统调用 进程快照

    #include "windows.h" #include "tlhelp32.h" #include "iostream" using n ...

  8. spark history-server的使用

    为什么需要historyServer? 在运行Spark Application的时候,Spark会提供一个WEBUI列出应用程序的运行时信息:但该WEBUI随着Application的完成(成功/失 ...

  9. sql存储过程传入ID集合,和临时表的使用

    方式1: Declare @SQL NVarChar(max) set @SQL='select *from Loanee as a  ApplicationID in ('+@Application ...

  10. Java生成excel导出文件(使用poi+JXL)

    1.使用poi生成文件 package com.mi.entity; import java.util.Date; public class Student { private int id; pri ...