4.1.1  概述

在日常程序开发中,处理外部资源是很繁琐的事情,我们可能需要处理URL资源、File资源资源、ClassPath相关资源、服务器相关资源(JBoss AS 5.x上的VFS资源)等等很多资源。因此处理这些资源需要使用不同的接口,这就增加了我们系统的复杂性;而且处理这些资源步骤都是类似的(打开资源、读取资源、关闭资源),因此如果能抽象出一个统一的接口来对这些底层资源进行统一访问,是不是很方便,而且使我们系统更加简洁,都是对不同的底层资源使用同一个接口进行访问。

Spring 提供一个Resource接口来统一这些底层资源一致的访问,而且提供了一些便利的接口,从而能提供我们的生产力。

4.1.2  Resource接口

Spring的Resource接口代表底层外部资源,提供了对底层外部资源的一致性访问接口。

java代码:

查看 复制到剪贴板 打印
  1. public interface InputStreamSource {
  2. InputStream getInputStream() throws IOException;
  3. }
java代码:

查看 复制到剪贴板 打印
  1. public interface Resource extends InputStreamSource {
  2. boolean exists();
  3. boolean isReadable();
  4. boolean isOpen();
  5. URL getURL() throws IOException;
  6. URI getURI() throws IOException;
  7. File getFile() throws IOException;
  8. long contentLength() throws IOException;
  9. long lastModified() throws IOException;
  10. Resource createRelative(String relativePath) throws IOException;
  11. String getFilename();
  12. String getDescription();
  13. }

1)InputStreamSource接口解析:

getInputStream:每次调用都将返回一个新鲜的资源对应的java.io. InputStream字节流,调用者在使用完毕后必须关闭该资源。

2)Resource接口继承InputStreamSource接口,并提供一些便利方法:

exists:返回当前Resource代表的底层资源是否存在,true表示存在。

isReadable:返回当前Resource代表的底层资源是否可读,true表示可读。

isOpen:返回当前Resource代表的底层资源是否已经打开,如果返回true,则只能被读取一次然后关闭以避免内存泄漏;常见的Resource实现一般返回false。

getURL:如果当前Resource代表的底层资源能由java.util.URL代表,则返回该URL,否则抛出IOException。

getURI:如果当前Resource代表的底层资源能由java.util.URI代表,则返回该URI,否则抛出IOException。

getFile:如果当前Resource代表的底层资源能由java.io.File代表,则返回该File,否则抛出IOException。

contentLength:返回当前Resource代表的底层文件资源的长度,一般是值代表的文件资源的长度。

lastModified:返回当前Resource代表的底层资源的最后修改时间。

createRelative:用于创建相对于当前Resource代表的底层资源的资源,比如当前Resource代表文件资源“d:/test/”则createRelative(“test.txt”)将返回表文件资源“d:/test/test.txt”Resource资源。

getFilename:返回当前Resource代表的底层文件资源的文件路径,比如File资源“file://d:/test.txt”将返回“d:/test.txt”,而URL资源http://www.javass.cn将返回“”,因为只返回文件路径。

getDescription:返回当前Resource代表的底层资源的描述符,通常就是资源的全路径(实际文件名或实际URL地址)。

Resource接口提供了足够的抽象,足够满足我们日常使用。而且提供了很多内置Resource实现:ByteArrayResource、InputStreamResource 、FileSystemResource 、UrlResource 、ClassPathResource、ServletContextResource、VfsResource等。

文章转自:http://sishuok.com/forum/blogPost/list/0/2455.html#7103

资源之基础知识(一)相关推荐

  1. puppet自动化运维之puppet的资源基础知识

    2019独角兽企业重金招聘Python工程师标准>>> puppet自动化运维之puppet的资源基础知识 此篇文章,主要是让读者提前了解puppet资源的一些知识. 变量和数组会经 ...

  2. 教室计算机文件共享方法,教程方法;34、共享文件--电脑基础知识电脑技巧-琪琪词资源网...

    琪琪词资源网-教程方法;34.共享文件--电脑基础知识电脑技巧,以下是给大家带来的教程方法;34.共享文件--电脑基础知识,大家可以了解一下哦! 在一个几台机子连成的网络里,相互之间可以通过网上邻居共 ...

  3. Java-2-学习历程2:基础知识1,2,3文档、完整版视频资源、电子书籍下载

     Java学习历程:基础知识1,2,3文档.完整版视频资源.电子书籍 1.基础知识1,2,3可到以下地址下载: http://download.csdn.net/detail/iot_li/886 ...

  4. 《计算机网络应用基础》模拟试卷(六),《计算机与网络应用基础知识1》模拟试卷...

    <计算机与网络应用基础知识1>模拟试卷 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 <计算机与网络应用基础知识1& ...

  5. python计算wav的语谱图_Python实现电脑录音(含音频基础知识讲解)

    前言 今天开始进入近期系列文章的第一篇,如何用 Python 来实现录音功能. 在开始"造轮子"之前,个人一直强调一个观点,如果有些东西已经有了,不妨直接去 github 上搜,用 ...

  6. 第一代电子计算机诞生的国家是( ),计算机基础知识习题.doc

    计算机基础知识习题.doc (2页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 计算机基础知识题计算机的诞生:第一台电子计算机是1946 ...

  7. PHP内核介绍及扩展开发指南—基础知识

    一. 基础知识 本章简要介绍一些Zend引擎的内部机制,这些知识和Extensions密切相关,同时也可以帮助我们写出更加高效的PHP代码. 1.1 PHP变量的存储 1.1.1 zval结构 Zen ...

  8. 华南理工计算机基础知识题,华南理工_计算机应用基础_随堂练习答案(2017年)

    华南理工_计算机应用基础_随堂练习答案(2017年) (18页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.9 积分 . . . .华南理工-计算 ...

  9. 华南理工网络计算机基础知识,2019年华南理工大学网络教育计算机基础随堂练习第一章...

    2019年华南理工大学网络教育计算机基础随堂练习第一章 (9页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 第一章 计算机基础知识·第 ...

最新文章

  1. Win Ser 2008/2012 (R2) + NVIDIA Optimus 笔记本显卡
  2. 十大python开发软件-2017年最棒的七个Python图形应用GUI开发框架
  3. 评估指标:混淆矩阵、PR、mAP、ROC、AUC
  4. 数据挖掘之关联分析三(规则的产生)
  5. asp.net如何生成图片验证码
  6. 计算机user用户的密码存储在,windows存放用户密码的文件
  7. java直接读取rar,Java无需解压直接读取Zip文件和文件内容
  8. 牛客小白月赛13 解题报告
  9. mysql学习day04
  10. 初探单点登录 SSO
  11. 一些常用的前端基础操作
  12. android 15 activity跳转
  13. C++中convertTo对应的python代码
  14. 什么时候开始论文查重?
  15. python 循环高级用法 [expression for x in X [if condition] for y in Y [if condition] ... for n in N [if con
  16. Eat,PrayLove--结婚3周年
  17. c语言如何判定是32位系统还是64位系统
  18. cocos creator 设置开启canvas 透明后 半透明图片 不正常的 官方解决办法
  19. 微信小程序中简单使用echarts图表
  20. 7-18 二分法求多项式单根

热门文章

  1. Intel(R) Software Guard Extensions Developer Guide 参考中译文,阅读
  2. 手机引导式html,iOS14中引导式访问模式有什么用
  3. 华为p50预计售价鸿蒙是什么,华为P50没赶上首发鸿蒙系统,还有哪些值得期待的地方?...
  4. 乔梁老师的持续交付七巧板和三步法思维实践
  5. 小黑小波比.github问题总汇
  6. pinpoint 介绍
  7. 快手怎么引流卖产品?快手怎么引流卖货赚钱?
  8. 使用sklearn预测共享单车出行情况
  9. linux命令行引导iso,grub4dos引导硬盘iso安装manjaro linux
  10. Win10待机一段时间就会蓝屏