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 ...
随机推荐
- 数据库迁移之从oracle 到 MySQL
方式一: 手动方式导入导出 手动的方式导入, 就是操作步骤会比较繁琐一些. 对Table 的结构和数据: 1. 使用 SQL Developer 把 oracle 的 table 的schema 和 ...
- java程序运行时内存分配详解 (转)
转自:http://www.tuicool.com/articles/uU77v2 一. 基本概念 每运行一个java程序会产生一个java进程,每个java进程可能包含一个或者多个线程,每一个Ja ...
- HDU 1724 Ellipse(数值积分の辛普森公式)
Problem Description Math is important!! Many students failed in 2+2’s mathematical test, so let's AC ...
- bzoj 4358 permu
比较容易想到莫队算法+线段树,但是这样时间复杂度是O(nsqrtnlogn)无法通过,考虑如果不进行删除操作,只有添加操作的话那么并查集就可以实现了,于是可以设定sqrtn块,每个块范围为(i-1)* ...
- android EditText长按屏蔽ActionMode context菜单但保留选择工具功能
最近项目要求屏蔽EditText 长按出来的ActionMode菜单,但是要保留选择文本功能.这个屏蔽百度会出现各种方法,这里说一下我的思路: 1.屏蔽百度可知setCustomSelectionAc ...
- ThinkPHP讲解(六)——添加数据
添加数据到数据库有三种方式 第一种:使用数组添加 $model=D("Info"); //实例化对象 //添加数据的第一种方式:使用数组添加 //要添加的数组,必须是关联数组,ke ...
- 什么是BI【转】
产品与服务 - 商务智能 目前,商业智能产品及解决方案大致可分为数据仓库产品.数据抽取产品.OLAP产品.展示产品.和集成以上几种产品的针对某个应用的整体解决方案 商业智能是什么? 简而言之, ...
- iOS 学习笔记 二 (2015.02.26)
How To Use Git Source Control with Xcode in iOS 6 If you're new here, you may want to subscribe to m ...
- Install DBD::mysql for Perl in XAMPP in Mac , solving errors
我不知道 why,在 Mac 安装 DBI::mysql 总会报错 我为了给 cgi-bin 添加 mysql-perl 数据库支持,也是够麻烦的 make sure that mysql and m ...
- C# Community Projects
Community Supported C# Drivers See the officially supported MongoDB C# driver mongodb-csharp driver ...