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. Java静态代理与动态代理 理解与应用场景

    角色 抽象角色:接口类 实现角色: 实现类 代理角色:代理实现的类,最终使用的对象 静态代理 1. 接口 /** * description * * @author 70KG * @date 2018 ...

  2. c++的动态绑定和静态绑定及多态的实现原理(摘)

    C++多态的实现原理 为了支持c++的多态性,才用了动态绑定和静态绑定.理解它们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误. 需要理解四个名词:对象的静态类型:对象在声明时采用的类型. ...

  3. IDEA 中tomcat图片储存和访问虚拟路径(图片和程序分家)

    本文链接:https://blog.csdn.net/qq_36481052/article/details/78813213 **前段时间,遇到了图片已经储存了文件中也显示有图片,但就是死活访问不到 ...

  4. 使用Fiddler抓包抓取不了数据包的问题

    一:(我)抓包遇到的问题. ①:抓包一直出现这个问题 解决办法:  如果你遇到上面的问题,就可能是证书的问题(我的本地证书是用系统生成证书的一个软件生成的个人证书,所以出现了问题,我抓的所有数据都出现 ...

  5. 项目架构&架构部署&网站分析&网站优化

    一.架构演变 一个项目至少由三层内容组成:web访问层.数据库层.存储层 初级阶段 单体阶段 常见场景:项目初期 部署特点:所有应用服务都在一台主机 应用特点:开发简单 应用/数据分离阶段 常见场景: ...

  6. Github的使用/git远程提交代码到Github

    Github的使用/git远程提交代码到Github Github是全球最大的社交编程及代码托管网站 Git是一个开源的分布式版本控制系统 1.基本概念 Repository(仓库):仓库用于存放项目 ...

  7. Codeforces Round #604 (Div. 2) A,B,C【D题待补】

    思路:直接暴力判断就OK了 #include<bits/stdc++.h> using namespace std; #define int long long signed main() ...

  8. 002——转载Excel2010分成两个或者多个独立窗口

    在借鉴了很多个baidu方法之后,使用修改注册表之后我的Excel终于可以独立窗口出来了.转自:www.xuexila.com/excel/2010/2051008.html方法如下: 本操作需要修改 ...

  9. 洛谷 P1140 相似基因 题解

    每日一题 day23 打卡 Analysis dp[i][j]表示序列A中前i个与序列B中前j个匹配的相似度最大值 所以,dp方程很容易想到: 1.让a[i]与b[j]匹配 2.让a[i]与B序列中一 ...

  10. Hadoop2.8 安装

    一.下载Hadoop与java jdk-8u221-linux-x64.tar.gz  Oracle官网下载 hadoop-2.8.5.tar.gz   Hadoop官网下载 二.配置服务期间ssh免 ...