Spring Resources之介绍和资源接口
1.介绍
不幸的是Java的标准的java.net.URL类和针对不同的URL前缀的标准处理器都不够充分去访问所有的低级资源。例如,美誉标准化的URL实现可能用于去范围需要从classpath中或者相对于一个SerletContext获取的资源。尽管可以可以针对特殊的URL前缀注册新的处理器,但是一般来讲这回很复杂而且URL接口仍然缺乏一些想要的功能更,比如一个去检查指向支援的存在的方法。
2.资源(Resource)接口
Spring的资源接口意味着更强的通过抽象的方式来访问立即的资源:
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();
}
public interface InputStreamSource {
InputStream getInputStream() throws IOException;
}
Resource接口中一些最重要的方法是:
- getInputStream():锁定和打开资源,返回一个InputStream获取资源。这个期望每次的调用都返回一个刷新的InputStream。但是调用者有职责去关闭着个流。
- exists():返回一个Boolean,标识这些资源是否存在
- isOpen():返回布尔值,标识是否这个资源是否是一个打开的流。如果是true,InputStream不能多次的读取它,而且必须是只能读一次而且然后关闭它避免资源泄露。对于所有的一般的资源实现InputStreamResource来说将是false。
- getDescription():返回这个资源的描述,在处理资源的时候用于错误输出。通常是完全的文件名或者一个实际的URL。
其他的方法允许你获取的表示资源的实际的URL或者文件对象。(如果向下的实现是兼容的而且支持这个功能)
Resource的抽象在Spring 自身中是使用的很多,当一个资源被需要到时候,在很多的方法签名中它会作为一个参数类型传入。在一些Spring APIs的其他方法中,会使用一个未加修饰的简单的形式的String用于创建Resource,或者是通过在String路径中特殊前缀,运行调用者去指明一个明确已经被创建和使用的的资源实现。
尽管Resource接口被Spring 和通过Spring被大量的使用,但是在你的代码中通过它自己把它当做一个通用的工具类来使用是很有用的,为了访问资源,甚至是当你的代码不知道或者不关心Spring的其他部分。尽管这个将你的代码和Spring耦合在一块,但是它只是耦合到了很小的一部分工具类中,而且它可以作为URL的有效替代,而且还可以和其他你想使用的库当成是等价的。
Spring Resources之介绍和资源接口的更多相关文章
- spring boot 使用spring.resources.static-locations 分离系统模版&&资源文件
方便我们将资源配置以及模版&&静态文件分离出来,而不是打包在一起,比如以下的一个demo 参考配置: server.port=8006 spring.application.name= ...
- spring bean的介绍以及xml和注解的配置方法
5.Bean 下边我们来了解一下Bean的: Bean的作用域Bean的生命周期Bean的自动装配Resources和ResourceLoader 5.1Bean容器的初始化 Bean容器的初始化 两 ...
- Spring Boot实战:静态资源处理
前两章我们分享了Spring boot对Restful 的支持,不过Restful的接口通常仅仅返回数据.而做web开发的时候,我们往往会有很多静态资源,如html.图片.css等.那如何向前端返回静 ...
- spring.resources
@EnableWebMvcNormally you would add @EnableWebMvc for a Spring MVC app, but Spring Boot adds it auto ...
- Spring MVC 使用介绍(十四)文件上传下载
一.概述 文件上传时,http请求头Content-Type须为multipart/form-data,有两种实现方式: 1.基于FormData对象,该方式简单灵活 2.基于<form> ...
- Spring Boot的数据访问:CrudRepository接口的使用
示例 使用CrudRepository接口访问数据 创建一个新的Maven项目,命名为crudrepositorytest.按照Maven项目的规范,在src/main/下新建一个名为resource ...
- 【spring boot】7.静态资源和拦截器处理 以及继承WebMvcConfigurerAdapter类进行更多自定义配置
开头是鸡蛋,后面全靠编!!! ======================================================== 1.默认静态资源映射路径以及优先顺序 Spring B ...
- Java之Spring Cloud概念介绍(非原创)
文章大纲 一.理解微服务二.Spring Cloud知识介绍三.Spring Cloud全家桶四.参考资料下载五.参考文章 一.理解微服务 我们通过软件架构演进过程来理解什么是微服务,软件架构的发 ...
- 在Spring Boot中输出REST资源
前面我们我们已经看了Spring Boot中的很多知识点了,也见识到Spring Boot带给我们的各种便利了,今天我们来看看针对在Spring Boot中输出REST资源这一需求,Spring Bo ...
随机推荐
- 云梯vpn
刚和大饼合买了一个云梯的vpn 表示可以把俺的优惠连接放出来了 貌似必须是新注册用户才能够享用优惠 http://protizi.com/?r=5e3fecd7eae558ec 把云梯推荐给朋友们 让 ...
- Mozilla5.0的含义
mod=viewthread&tid=757008">http://www.lightnovel.cn/forum.php?mod=viewthread&tid=757 ...
- hdu4770:Lights Against Dudely(回溯 + 修剪)
称号:hdu4770:Lights Against Dudely 题目大意:相同是n*m的矩阵代表room,房间相同也有脆弱和牢固之分,如今要求要保护脆弱的房间.须要将每一个脆弱的房间都照亮,可是牢固 ...
- NSIS:制作软件升级安装包
原文 NSIS:制作软件升级安装包 相信不是每个人写的软件都只发布一次就可以了,肯定要有修改和维护的情况发生.在这种情况下,您可能就需要一个软件的升级安装包了. 现在,我们就来一步步把这个安装包做 ...
- Java8 Lambda表达应用 -- 单线程游戏server+异步数据库操作
前段时间我们游戏server升级到开发环境Java8,这些天,我再次server的线程模型再次设计了一下,耗费Lambda表情. LambdaJava代码.特别是丑陋不堪的匿名内部类,这篇文章主要就是 ...
- cocos2d-x教程2:在windows下怎样批量转换pvr,ccz为png或jpg
这是一个非经常见的功能,可是找了全网,竟然找不到,于是借鉴别人的批处理文件,改了下,就能够把整个文件夹的所有一次批量转换. 将这个bat文件暂定为,myConvert.bat,运行时就把这个bat文件 ...
- Android项目外接高德地图代码混淆注意事项
如今好多项目中都加入了第三方jar包,可是最大的问题就是打包的时候代码混淆报错,下面是高德地图混淆报错解决方式: 在proguard-project.txt中加入例如以下代码: -libraryjar ...
- ASP.NET MVC — 第 4 天
ASP.NET MVC — 第 4 天 目录 第 1 天 第 2 天 第 3 天 第 4 天 第 5 天 第 6 天 第 7 天 0. 前言 欢迎来到第四天的 MVC 系列学习中.如果你直接开始学习今 ...
- CentOS 7安装配置Apache HTTP Server
原文 CentOS 7安装配置Apache HTTP Server RPM安装httpd # yum -yinstall httpd //安装httpd会自动安装一下依赖包: apr apr-ut ...
- Linux核心设计依据(七)系统调用
我理解的系统调用,用户进程和内核是内核提供了一个接口进行交互.除了异常和下降外.内核系统调用是唯一合法入境.像/proc还通过系统调用访问. 系统调用的意义: 让用户进程受限地訪问硬件设备 为用户空间 ...