Java的各种URL前缀的标准类和标准处理程序不足以完全访问低级资源。例如,没有URL可用于访问需要从类路径或相对于a获取的资源的标准化实现 ServletContext。虽然可以为专用URL 前缀注册新的处理程序(类似于现有的前缀处理程序http:),但这通常非常复杂,并且URL接口仍然缺少一些理想的功能,例如检查资源是否存在的方法指着。

Resource接口

  Spring的Resource接口是一个更强大的接口,用于抽象对低级资源的访问。以下清单显示了Resource接口定义:

 public interface Resource extends InputStreamSource {

     boolean exists();

     boolean isOpen();

     URL getURL() throws IOException;

     File getFile() throws IOException;

     Resource createRelative(String relativePath) throws IOException;

     String getFilename();

     String getDescription();

 }

  如Resource界面定义所示,它扩展了InputStreamSource 界面。以下清单显示了InputStreamSource 界面的定义:

 public interface InputStreamSource {

     InputStream getInputStream() throws IOException;

 }

  Resource界面中一些最重要的方法是:

    getInputStream():找到并打开资源,返回InputStream从资源中读取的内容。预计每次调用都会返回一个新的 InputStream。呼叫者有责任关闭流。

    exists():返回boolean指示此资源是否实际以物理形式存在的指示。

    isOpen():返回一个boolean指示此资源是否表示具有打开流的句柄的指示符。如果true,InputStream不能多次读取,必须只读一次然后关闭以避免资源泄漏。false所有常规资源实现的返回值,但InputStreamResource。

    getDescription():返回此资源的描述,用于处理资源时的错误输出。这通常是完全限定的文件名或资源的实际URL。

    其他方法允许您获取表示资源的实际URL或File对象(如果底层实现兼容并支持该功能)。

Resource实现

  Spring包括以下Resource实现:

  • UrlResource:UrlResource包装a java.net.URL并可用于访问通常可通过URL访问的任何对象,例如文件,HTTP目标,FTP目标等。
  • ClassPathResource:此类表示应从类路径获取的资源。它使用线程上下文类加载器,给定的类加载器或给定的类来加载资源。
  • FileSystemResource:这是一个Resource实现java.io.Filejava.nio.file.Path处理。它支持分辨率作为FileURL
  • ServletContextResource:这是一个资源Resource实现,用于ServletContext解释相关Web应用程序根目录中的相对路径。
  • InputStreamResource:InputStreamResourceResource给定的实现InputStream。只有在没有Resource适用的具体实施时才应使用它。
  • ByteArrayResource:这是Resource给定字节数组的实现。它ByteArrayInputStream为给定的字节数组创建一个 。

ResourceLoader

  该ResourceLoader接口旨在由可以返回(即加载)Resource实例的对象实现。以下清单显示了ResourceLoader 接口定义:

 public interface ResourceLoader {

     Resource getResource(String location);

 }

  调用getResource()特定的应用程序上下文,并且指定的位置路径没有特定的前缀时,您将返回一个Resource适合该特定应用程序上下文的类型。例如,假设针对ClassPathXmlApplicationContext实例执行了以下代码片段:

 Resource template = ctx.getResource("some/resource/path/myTemplate.txt");

  

前缀 示例 说明

classpath:

classpath:com/myapp/config.xml

从类路径加载

file:

file:///data/config.xml

从文件系统加载

http:

https://myserver/logo.png

加载为URL

(none)

/data/config.xml

取决于潜在的ApplicationContext

  应用程序上下文构造函数值中的资源路径可以是简单路径,每个路径都与目标进行一对一映射Resource,或者可以包含特殊的“classpath *:”前缀或内部Ant-样式正则表达式(使用Spring的PathMatcher实用程序匹配)。后者都是有效的通配符。

  “classpath *:” 此特殊前缀指定必须获取与给定名称匹配的所有类路径资源,然后合并以形成最终的应用程序上下文定义。

  Ant风格的资源地址,支持3种匹配符;

  • ?:匹配文件名中的一个字符;
  • * :匹配文件名中的任意个字符
  • **:匹配多层路径

  下面是几个示例:

  classpath:com/ssh/t?st.xml:匹配com/ssh路径下的com/ssh/test.xml、com/ssh/tast.xml等
  file:D:/conf/*Config.xml:匹配文件系统D:/conf路径下的所有文件以Config.xml为后缀的文件,比如匹配HibernateConf.xml,SpringConf.xml等;
  classpath:com/**/test/xml:匹配com类路径下(当前目录及其子孙目录)的test.xml文件,比如匹配:com/a/test.xml、com/a/b/c/d/test.xml等

  

【Java】Spring之Resource(三)的更多相关文章

  1. Java Spring Boot VS .NetCore (三)Ioc容器处理

    Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...

  2. [Java] Spring MVC 知识点

    云图: @Service 用于标注业务层组件. 在 Spring-servlet 配置xml中,component-scan 标签默认情况下自动扫描指定路径下的包(含所有子包),将带有@Compone ...

  3. [翻译]现代java开发指南 第三部分

    现代java开发指南 第三部分 第三部分:Web开发 第一部分,第二部分,第三部分 =========================== 欢迎来到现代 Java 开发指南第三部分.在第一部分中,我们 ...

  4. Java Spring Boot VS .NetCore (六) UI thymeleaf vs cshtml

    Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...

  5. Java Spring Boot VS .NetCore (七) 配置文件

    Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...

  6. Java——Spring超详细总结

    Spring概述 一.简化Java开发 Spring为了降低Java开发的复杂性,采用了以下四种策略 基于POJO的轻量级和最小侵入性编程: 通过依赖注入和面向接口实现松耦合: 基于切面和惯例进行声明 ...

  7. Spring Security Resource Server的使用

    Spring Security Resource Server的使用 一.背景 二.需求 三.分析 四.资源服务器认证流程 五.实现资源服务器 1.引入jar包 2.资源服务器配置 3.资源 六.测试 ...

  8. 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)

    Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...

  9. 从零开始学 Java - Spring 集成 ActiveMQ 配置(一)

    你家小区下面有没有快递柜 近两年来,我们收取快递的方式好像变了,变得我们其实并不需要见到快递小哥也能拿到自己的快递了.对,我说的就是类似快递柜.菜鸟驿站这类的代收点的出现,把我们原来快递小哥必须拿着快 ...

随机推荐

  1. linux第一天命令

    命令 :   命令 [选项] [参数]   /;根目录 用户主目录:/home/用户名   <==>  ~   1.ls 显示路径中的内容   ls [参数] [路径] ls ls -l  ...

  2. css cursor效果图

    效果图: <!DOCTYPE html> <html lang="zh-cmn-Hans"> <head> <meta charset=& ...

  3. 两点三次Hermiter插值C++代码

    #include <math.h> #include <gl/glut.h> #include <iostream> using namespace std; st ...

  4. Java - Oscache 缓存

    1. web.xml 文件配置 <!-- 配置页面缓存 --> <filter> <filter-name>oscache</filter-name> ...

  5. 002_基础电路_AD快捷键

    AD快捷键设置 陆小果哥哥制作 1.      F2----------------------------------------放置走线 a)        b)       需设置,点中走线按住 ...

  6. 04_(终结版)通过App实现对数据库的增删改

    设计思路:用户注册登录:用户注册或登录(login数据表),成功后进入增删改查(words数据表)注意:只有登录验证成功后才可以增删改查,否则提示未登录! 增:用户在App上add(单词.词义.音标) ...

  7. web基本概念

    一.互联网 互联网(英语:Internet),又称网际网络,或音译因特网(Internet).英特网,互联网始于1969年美国的阿帕网.是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连 ...

  8. Cogs 763. [USACO Open09] 数字的游戏(博弈)

    [USACO Open09] 数字的游戏 ★☆ 输入文件:cdgame.in 输出文件:cdgame.out 简单对比 时间限制:1 s 内存限制:128 MB Bessie正跟FJ玩一个数字游戏,她 ...

  9. 关于连接sftp以及本地配置sftp的事情

    1.window下配置sftp服务器 参考:https://blog.csdn.net/zhangliang_571/article/details/45598939 下载:http://www.fr ...

  10. QuartzNet 远程管理持久化job 项目, 源码在Github..希望对大家有所帮助

    文章目录 为了方便大家去学习 QuartzNet 与 CrystalQuartz 更多信息请点击链接查看 简介 结构图 为了方便大家去学习 QuartzNet 与 CrystalQuartz 更多信息 ...