资源访问

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. 无向连通图求割边+缩点+LCA

    Network Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 7082   Accepted: 2555 Descripti ...

  2. 最近兰州的js风格写个插件和一个template engine

    /* *@Product Name: Rational Framework Author: Calos Description: pager !important: pager */ (functio ...

  3. acm算法模板(4)

    杂乱小模板 状态压缩dp小技巧 x&-x是取x的最后一个1的位置. x-=x&-x是去掉x的最后一个1. 读入外挂 int nxt_int(){// neg or pos    cha ...

  4. php4.3.4.4、apache2.0.4.8、mysql 4.0.26、window7 配置过程

    apache的安装不需要过程,直接默认安装,下一步 下一步就Ok了. php4的安装: 1 将php-4.0.4-Win32.zip(最新版本4.0.4)解压缩到硬盘的一个目录中,例如解压到E:php ...

  5. extjs中的下载并对文件重命名功能的实现

    在小白的学习extjs的过程中,如果需要了解多文件的上传功能,也可以查看小白的上篇随笔,希望给大家帮助.http://www.cnblogs.com/wangqc/p/extjsFileUpload. ...

  6. yii2封装一个类控制div宽度,高度

    1.首先,封装一个类,放在文件夹vendor下,命名为articls.php. <?phpclass Articles{ //测试    function add()    {        r ...

  7. 。。。mkdir与mkdirs的区别。。。

    一直想知道他俩的区别,也一直忘记了,知道今天才没有放过这个机会! mkdir的用法是正创建一层目录,比如说在C盘下创建aa文件夹,c:\aa,这个aa是不存在的,这个话,是可以用mkdir创建的,但是 ...

  8. RelativeLayout相对布局属性

    RelativeLayout用到的一些重要的属性: 第一类:属性值为true或falseandroid:layout_centerHrizontal 水平居中android:layout_center ...

  9. 查看在线EBS用户的相关信息

    --查看在线EBS用户的相关信息 SELECT PAP.FULL_NAME, FU.USER_NAME, FAT.APPLICATION_NAME, FRT.RESPONSIBILITY_NAME, ...

  10. Eclipse字符集设置方式

    默认的字符集是GBK 1.windows->Preferences...打开"首选项"对话框,左侧导航树,导航到general->Workspace,右侧Text fi ...