外部资源获取

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

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

  Resource接口

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

 

java代码:
Java代码  收藏代码
  1. public interface InputStreamSource {  
  2.     InputStream getInputStream() throws IOException;  
  3. }  

 

java代码:
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等。

 

转载于:https://www.cnblogs.com/doudouxiaoye/p/5779786.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

芯明天debug assertion failed_YJLV铝芯电力电缆的基本介绍

原标题:YJLV铝芯电力电缆的基本介绍YJLV铝芯电力电缆,型号全称:铝芯交联聚乙烯绝缘聚氯乙烯护套电力电缆。YJLV电缆的含义为:YJ----交联聚乙烯绝缘;L----线芯材质为铝材。V----聚氯乙烯护套。YJLV电缆工作温度为导体额定工作温度9…

1.1.1 从简单的数据类型开始

/// <summary>/// C# 1.0 中定义的产品类型/// </summary>public class Product1{string name;public string Name { get { return name; } }decimal price;public decimal Price { get { return price; } }public Product1(string name, decimal price){this.name…

第2章 Python 数字图像处理(DIP) --数字图像基础3 - 图像内插 - 最近邻内插 - 双线性插值 - 双三次内插 - 图像放大

目录图像内插放大图像图像内插 内插通常在图像放大、缩小、旋转和几何校正等任务中使用。内插并用它来调整图像的大小&#xff08;缩小和放大&#xff09;&#xff0c;缩小和放大基本上采用图像重取样方法 最近邻内插&#xff0c;这种方法将原图像中最近邻的灰度赋给了每个新…

然爸读书笔记(2014-2)----影响力

第一章&#xff1a;影响力的武器 动物可能会看到某种颜色的羽毛而变得具有攻击性&#xff0c;或者听到某种叫声久对自己的天敌呵护有加。动物的这种愚蠢机械反应在人类身上也有&#xff0c;在某个触发特征出现时&#xff0c;我们会不假思索的做出相应的反应&#xff0c;之所以会…

pb 如何导出csv_Firefox火狐浏览器将提供导出密码至本地的功能

6月2日&#xff0c;据外媒All About Lifehacks报道&#xff0c;Mozilla官方的bug报告页面显示&#xff0c;Firefox浏览器的导出或备份密码请求的问题在前两天被关闭&#xff0c;并被标记为已解决。据了解&#xff0c;该请求早在多年前就有人提出。如今被标记为已解决&#xff0…

跟着别人的感觉做网络推广之二

无意中闯入了站台网&#xff08;一家历史很悠久的分类信息网站&#xff0c;印象中比58 赶集 百姓创办时间还早。&#xff09; 进入后当然看医疗分类了&#xff1a; http://www.zhantai.com/ 站台网&#xff0c;不是大的省份网民不能位置定位时&#xff0c;默认进入的是北京分站…

iOS - OC 面向对象语法

1、类 1&#xff09;根类&#xff1a;因为类 NSObject 是层次结构的最顶层&#xff0c;因此称为根类。 可以将类称为子类&#xff08;subclass&#xff09;和父类&#xff08;superclass&#xff09;&#xff0c;也可以将类称为子类和超类。2&#xff09;分类&#xff0f;类别&…

第2章 Python 数字图像处理(DIP) --数字图像基础4 -- 像素间的一些基本关系 - 邻域 - 距离测试

目录像素间的一些基本关系像素的相邻像素距离测试import sys import numpy as np import cv2 import matplotlib import matplotlib.pyplot as plt import PIL from PIL import Imageprint(f"Python version: {sys.version}") print(f"Numpy version: {np.__ve…

网页关闭(解决window.close在火狐下不兼容问题)

熟悉前端的都知道&#xff0c;火狐默认状态非window.open的页面window.close是无效的 网上有很多人说&#xff0c;在火狐的地址栏输入:about:config然后找到dom.allow_scripts_to_close_windows;把false改为true 看着这些人的说法&#xff0c;不得不说我蛋疼了 我做的是网站&am…

iphone备忘录突然没了_苹果突然下架12 天猫:双11有惊喜!iPhone12 mini配色缩水

点击“蓝字”关注我们苹果旗舰店突然下架iPhone 12 天猫回应&#xff1a;请期待11.11的惊喜今天&#xff0c;有网友反馈&#xff0c;苹果天猫旗舰店的iPhone 12和iPhone 12 Pro被下架了。小编查看了下&#xff0c;天猫Apple Store旗舰店确实已经下降了目前在售的 iPhone 12 和 …

CGI小白一些漫想

CGI Common Gateway Interface 一种基于浏览器的输入、在Web服务器上运行的程序方法你创建客户端的 CGI脚本, 服务器端的程序用来处理用户输入, 结果返回给用户CGI脚本是什么&#xff1f;它是怎样工作的  CGI脚本是用下列两种方法使用的: 作为一个表单的ACTION 或 作为一个页中…

SSH开发中 使用超链接到action 其excute方法会被执行两次 actual row count: 0; expected: 1...

由于执行两次excute,所以在做删除操作的时候会出现 Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1 表示找不到要删除的在控制台出现的语句是 Hibernate: delete from user where id? Hibernate: delete from user where id?…

第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波1 - 灰度变换和空间滤波基础、Sigmoid激活函数

这里写目录标题本节的目标背景灰度变换和空间滤波基础本节的目标 了解空间域图像处理的意义&#xff0c;以及它与变换域图像处理的区别熟悉灰度变换所有的主要技术了解直方图的意义以及如何操作直方图来增强图像了解空间滤波的原理 import sys import numpy as np import cv2…

微软Edge扩展工具箱旨在将Chrome扩展带至Edge

微软Windows 10新工具Edge扩展工具箱旨在让开发人员可以轻松地将Chrome扩展转换为微软Edge扩展。\\微软Edge扩展工具箱的目标是在少修改或不修改的情况下将Chrome扩展移植到微软Edge。按照微软官方的描述&#xff0c;“该工具会创建必要的JSON清单项&#xff0c;架起一座从chro…

absolute 必须 relative_Workfine如何控制身份证号码必须为18位?

在信息化系统的设计中&#xff0c;由于业务的需要&#xff0c;我们往往需要设置许多控制项&#xff0c;以保证系统能够按照业务要求流转&#xff0c;必须出库数量不能超过库存&#xff0c;人员信息不能重复录入&#xff0c;考勤区间不能有交叉等。此篇以实例的方式告诉大家如果…

angularAMD快速入门

ngularAMD是作者 marcoslin 使用 RequireJS &#xff0b; AngularJS开发的前端mvvm框架,因此你可以使用它快速创建一款Web App.他特别适合快速开发SPA应用&#xff0c;适当的和更简单的方式。 我们整合AngularJS和RequireJS不应该是复杂的&#xff0c;它不是angularAMD。在行动…

ASP.NET MVC5 网站开发实践(二) Member区域 - 用户部分(2)用户登录、注销

上次实现了用户注册&#xff0c;这次来实现用户登录&#xff0c;用到IAuthenticationManager的SignOut、SignIn方法和基于声明的标识。最后修改用户注册代码实现注册成功后直接登录。 目录&#xff1a; ASP.NET MVC5 网站开发实践 - 概述 ASP.NET MVC5 网站开发实践(一) - 项目…

第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波2 - 图像反转、对数变换

目录一些基本的灰度变换函数图像反转对数变换一些基本的灰度变换函数 如下图显示了在图像处理中频繁使用的3类基本函数&#xff1a; 线性&#xff08;反转和恒等变换&#xff09;函数对数&#xff08;对数和反对数变换&#xff09;函数幂律&#xff08;nnn次幂和nnn次根变换&…

为Android应用程序添加社会化分享功能

正在做个android的小应用&#xff0c;有点想尝试一下社会化分享&#xff0c;比如分享到新浪微博啥的。看一下新浪&#xff0c;人人网的API&#xff0c;说实话功能很全很强大&#xff0c;但虽说有相对的SDK&#xff0c;但是总觉得不方便。因为正在使用友盟的统计SDK&#xff0c;…

安卓手机浏览器排行_安卓手机双11性价比排行发布|拯救者手机发透明版|小米发大光圈手机镜头...

智友新闻2020-11-05本期摘要&#xff1a;①安卓手机双11性价比排行榜发布②联想拯救者电竞手机 Pro 至尊透明版启动预约③小米发伸缩式大光圈镜头概念安卓手机双11性价比排行榜发布 安兔兔近日发布了安卓手机双11性价比排行榜。该榜单的统计维度为 2020年10月1日至10月31日。其…