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 ...
随机推荐
- fighting_使用CSS美化文字
CSS3颜色渐变 background-image:linear-gradient(black,blue,green,red); 默认从上到下显示. 示例代码: <!DOCTYPE html&g ...
- <s:iterator> 对list操作的一种方法
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA6IAAAH3CAIAAAAuRnW9AAAgAElEQVR4nOzdf4gk1333+wLDDffhPp
- find 命令使用总结
参考:http://os.51cto.com/art/200908/141119.htm 1.find命令的一般形式 find pathname -options [-print -exec -ok ...
- prezi破解教程
http://www.joenchen.com/archives/998 http://www.joenchen.com/archives/945 Prezi Desktop 4.7.5免注册无时间限 ...
- demo06
city_data.xml <?xml version="1.0" encoding="utf-8"?> <resources> < ...
- sql 中延迟执行
SQL有定时执行的语句WaitFor. 语法格式:waitfor {delay 'time'|time 'time'} delay后面的时间是需要延迟多长时间后执行. time后面的时间是指定何时执行 ...
- C语言初学者代码中的常见错误与瑕疵(14)
见:C语言初学者代码中的常见错误与瑕疵(14) 相关链接:http://www.anycodex.com/blog/?p=87
- remoting方式
1. WebService跨平台,跨防火墙,但是很抱歉,基于xml速度慢2. RMI(java)/Remoting(.net)平台相关,基于二进制序列化,速度快.3.dcom(com+)spring提 ...
- Maven(一)
Maven学习总结(一)——Maven入门 一.Maven的基本概念 Maven(翻译为"专家","内行")是跨平台的项目管理工具.主要服务于基于Java平台的 ...
- 纯CSS实现nav导航栏+jQuery实现article区DIV切换
效果图: main.html 代码: <!DOCTYPE html> <html> <head> <title>MyHomepage</title ...