Spring资源访问
资源访问
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资源访问的更多相关文章
- spring资源访问接口和资源加载接口
spring 资源访问接口 JDK提供的资源访问类,如java.net.URL.File等,不能很好地满足各种资源的访问需求,比如缺少从类路径或者Web容器的上下文中获取资源的操作类. 鉴于此,spr ...
- spring 资源访问
spring 资源访问 Resource resource=null; //访问网络资源 resource=new UrlResource("file:bool.xml"); // ...
- 攻城狮在路上(贰) Spring(三)--- Spring 资源访问利器Resource接口
Spring为了更好的满足各种底层资源的访问需求.设计了一个Resource接口,提供了更强的访问底层资源的能力.Spring框架使用Resource装载各种资源,包括配置文件资源.国际化属性文件资源 ...
- Spring资源访问接口Resource
该接口拥有对不同资源类型的实现类 boolean exists() 资源是否存在 boolean isOpen() 资源是否打开 URL getURL() 如果底层资源可以表示成URL,则该方法返回对 ...
- 05.Spring 资源加载 - Resource
基本概念 Spring 把所有能记录信息的载体,如各种类型的文件.二进制流等都称为资源. 对 Spring 开发者来说,最常用的资源就是 Spring 配置文件(通常是一份 XML 格式的文件). S ...
- Spring源码分析——资源访问利器Resource之实现类分析
今天来分析Spring的资源接口Resource的各个实现类.关于它的接口和抽象类,参见上一篇博文——Spring源码分析——资源访问利器Resource之接口和抽象类分析 一.文件系统资源 File ...
- spring mvc官网下最新jar搭建框架-静态资源访问处理-注解-自动扫描
1.从官网下载spring相关jar http://spring.io/projects 点击SPRING FRAMEWORK
- Spring MVC 使用介绍(十一)—— 跨域与静态资源访问
一.跨域 服务端须在响应中添加相应响应头,从而允许跨域,具体可通过 public class CorsFilter extends OncePerRequestFilter { @Override p ...
- Spring Boot 静态资源访问原理解析
一.前言 springboot配置静态资源方式是多种多样,接下来我会介绍其中几种方式,并解析一下其中的原理. 二.使用properties属性进行配置 应该说 spring.mvc.static-pa ...
随机推荐
- 无向连通图求割边+缩点+LCA
Network Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 7082 Accepted: 2555 Descripti ...
- 最近兰州的js风格写个插件和一个template engine
/* *@Product Name: Rational Framework Author: Calos Description: pager !important: pager */ (functio ...
- acm算法模板(4)
杂乱小模板 状态压缩dp小技巧 x&-x是取x的最后一个1的位置. x-=x&-x是去掉x的最后一个1. 读入外挂 int nxt_int(){// neg or pos cha ...
- 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 ...
- extjs中的下载并对文件重命名功能的实现
在小白的学习extjs的过程中,如果需要了解多文件的上传功能,也可以查看小白的上篇随笔,希望给大家帮助.http://www.cnblogs.com/wangqc/p/extjsFileUpload. ...
- yii2封装一个类控制div宽度,高度
1.首先,封装一个类,放在文件夹vendor下,命名为articls.php. <?phpclass Articles{ //测试 function add() { r ...
- 。。。mkdir与mkdirs的区别。。。
一直想知道他俩的区别,也一直忘记了,知道今天才没有放过这个机会! mkdir的用法是正创建一层目录,比如说在C盘下创建aa文件夹,c:\aa,这个aa是不存在的,这个话,是可以用mkdir创建的,但是 ...
- RelativeLayout相对布局属性
RelativeLayout用到的一些重要的属性: 第一类:属性值为true或falseandroid:layout_centerHrizontal 水平居中android:layout_center ...
- 查看在线EBS用户的相关信息
--查看在线EBS用户的相关信息 SELECT PAP.FULL_NAME, FU.USER_NAME, FAT.APPLICATION_NAME, FRT.RESPONSIBILITY_NAME, ...
- Eclipse字符集设置方式
默认的字符集是GBK 1.windows->Preferences...打开"首选项"对话框,左侧导航树,导航到general->Workspace,右侧Text fi ...