【Java】Spring之Resource(三)
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包装ajava.net.URL并可用于访问通常可通过URL访问的任何对象,例如文件,HTTP目标,FTP目标等。 - ClassPathResource:此类表示应从类路径获取的资源。它使用线程上下文类加载器,给定的类加载器或给定的类来加载资源。
- FileSystemResource:这是一个
Resource实现java.io.File和java.nio.file.Path处理。它支持分辨率作为File和URL。 - ServletContextResource:这是一个资源
Resource实现,用于ServletContext解释相关Web应用程序根目录中的相对路径。 - InputStreamResource:
InputStreamResource是Resource给定的实现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: |
|
从类路径加载 |
|
file: |
|
|
|
http: |
|
加载为 |
|
(none) |
|
取决于潜在的 |
应用程序上下文构造函数值中的资源路径可以是简单路径,每个路径都与目标进行一对一映射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(三)的更多相关文章
- Java Spring Boot VS .NetCore (三)Ioc容器处理
Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...
- [Java] Spring MVC 知识点
云图: @Service 用于标注业务层组件. 在 Spring-servlet 配置xml中,component-scan 标签默认情况下自动扫描指定路径下的包(含所有子包),将带有@Compone ...
- [翻译]现代java开发指南 第三部分
现代java开发指南 第三部分 第三部分:Web开发 第一部分,第二部分,第三部分 =========================== 欢迎来到现代 Java 开发指南第三部分.在第一部分中,我们 ...
- Java Spring Boot VS .NetCore (六) UI thymeleaf vs cshtml
Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...
- Java Spring Boot VS .NetCore (七) 配置文件
Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...
- Java——Spring超详细总结
Spring概述 一.简化Java开发 Spring为了降低Java开发的复杂性,采用了以下四种策略 基于POJO的轻量级和最小侵入性编程: 通过依赖注入和面向接口实现松耦合: 基于切面和惯例进行声明 ...
- Spring Security Resource Server的使用
Spring Security Resource Server的使用 一.背景 二.需求 三.分析 四.资源服务器认证流程 五.实现资源服务器 1.引入jar包 2.资源服务器配置 3.资源 六.测试 ...
- 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)
Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...
- 从零开始学 Java - Spring 集成 ActiveMQ 配置(一)
你家小区下面有没有快递柜 近两年来,我们收取快递的方式好像变了,变得我们其实并不需要见到快递小哥也能拿到自己的快递了.对,我说的就是类似快递柜.菜鸟驿站这类的代收点的出现,把我们原来快递小哥必须拿着快 ...
随机推荐
- LG4721 【模板】分治 FFT
P4721 [模板]分治 FFT 题目背景 也可用多项式求逆解决. 题目描述 给定长度为 $n-1$ 的数组 $g[1],g[2],..,g[n-1]$,求 $f[0],f[1],..,f[n-1]$ ...
- final修饰的变量引用不能变还是对象不可变
两种情况:如果是基本数据类型,被final修饰的变量一旦初始化就不能改变:如果是引用数据类型的变量,初始化之后不能指向另外一个对象. 基本数据类型: package cn.yqg.day2; publ ...
- css 为什么给span加vertical-align: middle不起作用?
vertical-align是什么意思?先举个例子! 这句html元素中的文本为什么不能垂直居中. <style> span{ height:60px;vertical-align: mi ...
- spark如何划分DAG视图
spark根据宽依赖进行DAG视图的划分. 1.窄依赖:每个父RDD的partition 最多被一个子RDD的 partition使用. 窄依赖分为两类:第一类是一对一的依赖关系,在Spark中用On ...
- MYSQL 常见引擎
Mysql常见的引擎 常用的引擎是:Innodb和Myiasm这两种引擎: innodb: 提供了对事务的ACID操作,还提供了行级锁和外键约束,,他的优势就是处理大量数据,在msql启动的时候, ...
- https://www.cnblogs.com/myblogs-miller/p/9046425.html
# SpringBoot中CommandLineRunner的作用> 平常开发中有可能需要实现在项目启动后执行的功能,SpringBoot提供的一种简单的实现方案就是添加一个model并实现Co ...
- QEventLoop以及QT事件循环
1.一般我们的事件循环都是由exec()来开启的,例如下面的例子: 1 QCoreApplicaton::exec() 2 QApplication::exec() 3 QDialog::exec() ...
- luogu 3466 对顶堆
显然答案是将一段区间全部转化成了其中位数这样的话,需要维护一个数据结构支持查询当前所有数中位数对顶堆 用两个堆将 < 中位数的数放入大根堆将 > 中位数的数放入小根堆这样就会存在删除操作 ...
- 机器学习实战(1)- KNN
KNN:k近邻算法-在训练样本中找到与待测样本距离相近的N个样本,并用这N个样本中所属概率最大的类别作为待测样本的类别. 算法步骤: 1.对训练中的样本数据的不同属性进行归一化处理. 2.计算待测样本 ...
- php-fpm nginx 超时参数设置
php-fpm:request_terminate_timeout = 30php.ini:max_execution_time = 30 request_terminate_timeout 适用于, ...