Spring为了更好的满足各种底层资源的访问需求。设计了一个Resource接口,提供了更强的访问底层资源的能力。
Spring框架使用Resource装载各种资源,包括配置文件资源、国际化属性文件资源等。
一、Resource接口的主要方法有
  boolean exists():资源是否存在。
  boolean isOpen():资源是否打开。
  URL getURL():如果底层资源可以表示为URL,该方法返回对应的URL对象。
  File getFile():如果底层资源对应一个文件,该方法返回对应的File对象。
  InputStream getInputStream() throws IOException:返回资源对应的输入流。
二、Resource继承体系
  1、Resource类图:图1


  2、实现类说明
    ByteArrayResource:二进制数组表示的资源,二进制数组资源可以在内存中通过程序构造。
    ClassPathResource:类路径下的资源,资源以相对于类路径的方式表示(一般是以相对于根路径的方式),
    FileSystemResouce:文件系统资源,资源以文件系统路径的方式表示。
    InputStreamResource:对应了一个InputStream的资源。
    ServletContextResource:为访问Web容器上下文中的资源二设计的类,负责以相对于Web应用根目录的路径来加载资源。
    UrlResource:封装了java.net.URL,它使用户能够访问任何可以通过URL表示的资源,如文件系统的资源,HTTP资源,FTP资源。
    EncodedResource:对资源进行编码,以保证资源内容操作的正确性。
    说明:Spring的Resource接口及其实现类可以在脱离了Spring框架的情况下使用。
  3、实例代码

Resorce res = new FileSystemResource("d:/test.txt");
//对应路径classpath\conf\file2.txt
Resource res2 = new ClassPathResource("conf/file2.txt");
//web应用环境中:
Resource res3 = new ServletContextResouce(application, "/WEB-INF/classes/conf/file2.txt");
//对资源进行编码:
EncodedResource encRes = new EncodedResource(res, "UTF-8");

三、资源加载
  按照上面的介绍,访问不同类型的资源时,需要使用相应的Resource实现类,比较麻烦。为了可以在不显示使用Resource实现类的情况下,仅通过资源地址的特殊标识就可以加载相应的资源,Spring提供了一个强大的加载资源的机制,可以通过"classpath:","file:"等资源地址前缀识别不同的资源类型,还支持ant风格的带通配符的资源地址。
  1、资源地址表达式

地址前缀 示例 对应资源类型
classpath: classpath:com/xxx/demo.xml 从类路径中加载资源,classpath:和classpath:/是等价的,都是相对于类的根路径。资源文件可以在标准文件系统中,也可以在jar或者zip文件中。
file: file:/conf/com/xxx/demo.xml 使用UrlResource从文件系统目录中装载资源,可以采用绝对或者相对路径。
http:// http://www.xxx.com/resource/demo.xml 使用UrlResource从Web服务器中装载资源
ftp:// ftp://www.xxx.com/resource/demo.xml 使用UrlResource从Ftp服务器中装载资源
没有前缀 com/xxx/demo.xml 根据ApplicationContext具体实现类采用对应的类型的Resource。

    A、Ant风格支持3种匹配符:
      ?:匹配文件名中的一个字符
      *:匹配文件名中的任意个字符。
      **:匹配多层路径。
    B、实例:
      classpath:com/t?et.xml
      file:D:/conf/*.xml
      classpath:com/**/test.xml
    C、注意classpath:和classpath*:的区别。
  2、资源加载器
    类图:


    实例代码:

ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resolver.getResources("classpath*:com/xxx/**/*.xml");

攻城狮在路上(贰) Spring(三)--- Spring 资源访问利器Resource接口的更多相关文章

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

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

  2. Spring源码分析——资源访问利器Resource之接口和抽象类分析

    从今天开始,一步步走上源码分析的路.刚开始肯定要从简单着手.我们先从Java发展史上最强大的框架——Spring...旗下的资源抽象接口Resource开始吧. 我看了好多分析Spring源码的,每每 ...

  3. 攻城狮在路上(贰) Spring(四)--- Spring BeanFactory简介

    BeanFactory时Spring框架最核心的接口,它提供了高级IoC的配置机制,使管理不同类型的Java对象成为了可能.我们一般称BeanFactory为IoC容器.BeanFactory是Spr ...

  4. 攻城狮在路上(贰) Spring(二)--- Spring IoC概念介绍

    一.IoC的概念: IoC(控制反转)是Spring容器的核心.另一种解释是DI(依赖注入),即让调用类对某一个接口的依赖关系由第三方注入,以移除调用类对某一个接口实现类的一览. 定义如此,由此可见, ...

  5. 攻城狮在路上(贰) Spring(一)--- 软件环境、参考书目等一览表

    一.软件环境: 二.参考书目: <Spring 3.X 企业应用开发实战> 陈雄华.林开雄著 电子工业出版社出版 三.其他说明: spring 源码地址:https://github.co ...

  6. 攻城狮在路上(肆)How tomcat works(三) 连接器:Connector

     在介绍中提到,Catalina中有两个主要的模块:连接器和容器.本章中你将会写一个可以创建更好的请求和响应对象的连接器,用来改进第2章中的程序.一个符合Servlet 2.3和2.4规范的连接器必须 ...

  7. 攻城狮在路上(叁)Linux(三十)--- 光盘写入工具

    一.基本步骤: 1.用mkisofs命令将所需备份的数据构建成镜像文件. 2.用cdrecord命令将镜像文件刻录至光盘或者DVD中. 二.mkisofs:新建镜像文件 mkisofs [-0 镜像文 ...

  8. 攻城狮在路上(壹) Hibernate(三)--- 属性访问、命名策略、派生属性、指定包名等

    一.hibernate访问持久化类属性的策略: 在<property>元素中的access属性用于指定Hibernate访问持久化类属性的方式. 常见的方式如下: 1.property:默 ...

  9. 攻城狮在路上(叁)Linux(三十一)--- vim程序编辑器

    本篇主要介绍vim编辑器的使用方式,具体内容后续补充.

随机推荐

  1. phpcms后台进入地址(包含No permission resources错误)

    安装phpcms后却不知道怎么进入后台,实际上输入如下地址即可进入后台登陆界面: http://你的域名/admin.php 如果出现No permission resources.错误,可能是之前修 ...

  2. 巧用linux服务器的/dev/shm/,如果合理使用,可以避开磁盘IO不给力,提高网站访问速度。

    巧用linux服务器的/dev/shm/ 巧用linux服务器的/dev/shm/,如果合理使用,可以避开磁盘IO不给力,提高网站访问速度. 首先让我们认识一下,什么是tmpfs和/dev/shm/? ...

  3. (转)Do not use "using" for WCF Clients - 不要将WCF Client 放在 ‘Using’ 代码块中

    RT,最近在编写WCF的应用程序,发现WCF client在关闭的时候有可能会抛出异常,经过搜索之后,发些小伙伴们也遇到过类似的问题,遂记载下来,以备自身和其他小伙伴查看. 原文链接:http://w ...

  4. linux expect

    1.首先确定是否安装expect /home/root> which expect /usr/bin/expect 如果没有安装,先安装一下 安装方法: 请参考 http://www.cnblo ...

  5. MongoDB 副本集管理(不定时更新)

    简介: 前面介绍完了副本集的搭建.用户的管理.参数和日常操作的说明,那副本集搭建好该如何管理呢?现在来说明下副本集的日常查看和管理. 说明: 1)查看命令行参数:db.serverCmdLineOpt ...

  6. Divide and conquer:Aggressive Cows(POJ 2456)

    侵略性的牛 题目大意:C头牛最大化他们的最短距离 常规题,二分法即可 #include <iostream> #include <algorithm> #include < ...

  7. 【Git】笔记5 分支管理2

    来源:廖雪峰 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,Git就会在merge时生成一 ...

  8. wkwebview 代理介绍

    iOS 8引入了一个新的框架——WebKit,之后变得好起来了.在WebKit框架中,有WKWebView可以替换UIKit的UIWebView和AppKit的WebView,而且提供了在两个平台可以 ...

  9. cocos2d-x 第三篇 基本概念介绍

    场景(scene): 也有人叫做屏幕或舞台,是一个独立的程序流,一个程序可以有很多场景但当前运行的场景就只有一个.比如游戏中可以有介绍场景,菜单场景,第一关场景,过场1场景,第二关场景,胜利场景等.一 ...

  10. ajax加载模块实时刷新的原理

    var loadMenu = function(data) {        var trs = template.render('menu-list-temp', {'list': data});  ...