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之介绍和资源接口的更多相关文章

  1. spring boot 使用spring.resources.static-locations 分离系统模版&&资源文件

    方便我们将资源配置以及模版&&静态文件分离出来,而不是打包在一起,比如以下的一个demo 参考配置: server.port=8006 spring.application.name= ...

  2. spring bean的介绍以及xml和注解的配置方法

    5.Bean 下边我们来了解一下Bean的: Bean的作用域Bean的生命周期Bean的自动装配Resources和ResourceLoader 5.1Bean容器的初始化 Bean容器的初始化 两 ...

  3. Spring Boot实战:静态资源处理

    前两章我们分享了Spring boot对Restful 的支持,不过Restful的接口通常仅仅返回数据.而做web开发的时候,我们往往会有很多静态资源,如html.图片.css等.那如何向前端返回静 ...

  4. spring.resources

    @EnableWebMvcNormally you would add @EnableWebMvc for a Spring MVC app, but Spring Boot adds it auto ...

  5. Spring MVC 使用介绍(十四)文件上传下载

    一.概述 文件上传时,http请求头Content-Type须为multipart/form-data,有两种实现方式: 1.基于FormData对象,该方式简单灵活 2.基于<form> ...

  6. Spring Boot的数据访问:CrudRepository接口的使用

    示例 使用CrudRepository接口访问数据 创建一个新的Maven项目,命名为crudrepositorytest.按照Maven项目的规范,在src/main/下新建一个名为resource ...

  7. 【spring boot】7.静态资源和拦截器处理 以及继承WebMvcConfigurerAdapter类进行更多自定义配置

    开头是鸡蛋,后面全靠编!!! ========================================================  1.默认静态资源映射路径以及优先顺序 Spring B ...

  8. Java之Spring Cloud概念介绍(非原创)

    文章大纲 一.理解微服务二.Spring Cloud知识介绍三.Spring Cloud全家桶四.参考资料下载五.参考文章 一.理解微服务   我们通过软件架构演进过程来理解什么是微服务,软件架构的发 ...

  9. 在Spring Boot中输出REST资源

    前面我们我们已经看了Spring Boot中的很多知识点了,也见识到Spring Boot带给我们的各种便利了,今天我们来看看针对在Spring Boot中输出REST资源这一需求,Spring Bo ...

随机推荐

  1. flex eclipse综合spring入门

    首先下载FlashBuilder_4_7_LS10_win64.exe试了几eclipse安装没有成功插头,含有myeclipse8.5.spring sts2.9.2.eclipse3.5.j2ee ...

  2. MEF初体验之四:Imports声明

    组合部件使用[System.ComponentModel.Composition.ImportAttribute]特性声明导入.与导出类似,也有几种成员支持,即为字段.属性和构造器参数.同样,我们也来 ...

  3. SpringMVC 学习笔记(两) @RequestMapping、@PathVariable和其他注意事项

    1.1. @RequestMapping映射请求 SpringMVC 采用 @RequestMapping 注解为控制器指定能够处理那些URL 请求 @requestMapping  能够定义在 类  ...

  4. QTbutton设置背景颜色和文字显示位置设置

    QPushButton * pQBtn = new QPushButton( cBuff, this ); pQBtn->setStyleSheet("text-align: left ...

  5. 使用 Advanced Installer 打包 一键安装Web应用程序

    原文:使用 Advanced Installer 打包 一键安装Web应用程序 安装预览: 资源下载: 示例安装包 操作流程: 1.新建Asp.net Application. 2.设置应用程序名称和 ...

  6. 创建Windows类别

    Windows在表单.控制.对话框基本上形成.Windows类是Windows形式的类型,可处理叙述性说明. 在Windows提前有很多定义Windows类别,但它可以很容易地创建自己的Windows ...

  7. 解决SQL订阅过程中找不到已经创建的订阅

    原文:解决SQL订阅过程中找不到已经创建的订阅 之前有写过一篇博客,主要是图解SQL复制技术:图解SQL 2008数据库复制,当时的测试环境是在我本地同一个服务器上面,所以测试的时候可谓是一帆风顺,最 ...

  8. HDU 3729 I&#39;m Telling the Truth(二部图最大匹配+结果输出)

    职务地址:HDU 3729 二分图最大匹配+按字典序输出结果. 仅仅要从数字大的開始匹配就能够保证字典序最大了.群里有人问. . 就顺手写了这题. . 代码例如以下: #include <ios ...

  9. 【日报C在23】堆和栈的深入了解

    每日一C之堆与栈的深入理解        每天拾一个C语言贝壳,厚积薄发,积跬步以致千里.  今日贝壳:内存中堆与栈的深入理解.认识一个清晰地内存                          假 ...

  10. 网络编程easy错误点-手知道

    通常的网络编程socket编程.实际上.socket编程并不仅仅是满足网络间不同主机之间的通信,它也能实现同一台主机上不同进程间的通信需求. 其体如今创建socket时的參数的不同: int sock ...