java resources介绍_Java之Resource接口
接口简介
JDK中提供了java.net.URL这个类来用于获取不同种类的资源(根据不同前缀的url可以获取不同种类的资源)。但是URL这个类没有获取classpath和ServletContext下的资源的能力。因此Spring提供了Resource接口,用于获取各种资源。
Resource接口
spring中的org.springframework.core.io.Resource接口代表着物理存在的任何资源,其继承于org.springframework.core.io.InputStreamSource。
Spring的资源接口是一个更强大的接口,用于抽象对低级资源的访问。
Resource接口的主要方法如下:
public interface Resource extends InputStreamSource {
boolean exists();
default boolean isReadable() {
return exists();
}
default boolean isOpen() {
return false;
}//加入Java开发交流君样:756584822一起吹水聊天
default boolean isFile() {
return false;
}
URL getURL() throws IOException;
URI getURI() throws IOException;
File getFile() throws IOException;
default ReadableByteChannel readableChannel() throws IOException {
return Channels.newChannel(getInputStream());
}
long contentLength() throws IOException;
long lastModified() throws IOException;
Resource createRelative(String relativePath) throws IOException;
@Nullable
String getFilename();
String getDescription();
}
关于上面提供的getURI和getURL方法这边做下解释。URI用于唯一指定互联网上一个资源的名字,我们可以理解为一个资源的唯一id。URL代表一个资源的唯一地址,我们通过这个地址可以在互联网上寻找到这个资源。通常可以用URL来代替URI。
Resource继承了InputStreamSource接口,下面是其定义:
public interface InputStreamSource {
//加入Java开发交流君样:756584822一起吹水聊天
InputStream getInputStream() throws IOException;
}
Resource的比较重要的方法如下:
getInputStream(): 定位和打开resource, 返回InputStream 来读取资源。每一次调用都会返回一个新的InputStream,调用者负责将其关闭。
exists(): 返回boolean,用来判断资源是否存在
isOpen(): 返回boolean,用来判断资源是不是已经存在一个open stream处理器。 true表明InputStream不能被多次读取,那么这次的读取会被关闭,以避免资源泄露。false是所有正常资源实现的返回,有可能会抛异常:InputStreamResource。
getDescription(): 返回资源的描述,用于错误输出。通常这会返回resource URL的全名。
其他的方法可以让你获取到代表resource的URL或者File对象。
Resource接口在Spring代码中非常常用,你也可以考虑应用到你的程序中。
内置的Resource实现
Spring中提供了很多Resource接口的实现类。主要有ByteArrayResource, ClassPathResource, DescriptiveResource, FileSystemResource, InputStreamResource, PortletContextResource, ServletContextResource和UrlResource。常用的有:
ClassPathResource:通过 ClassPathResource 以类路径的方式进行访问;
FileSystemResource:通过 FileSystemResource 以文件系统绝对路径的方式进行访问;
ServletContextResource:通过 ServletContextResource 以相对于Web应用根目录的方式进行访问。
UrlResource :通过java.net.URL来访问资源,当然它也支持File格式,如“file:”、“http:”。
ResourceLoader接口
ResourceLoader接口用来加载Resource资源。
public interface ResourceLoader {
Resource getResource(String location);
}//加入Java开发交流君样:756584822一起吹水聊天
所有的ApplicationContext类都实现了ResourceLoader接口,所以我们可以使用context来加载resource。
不同类型的ApplicationContext会返回不同的Resource。
当你在特定的应用程序上下文上调用getResource(),并且指定的位置路径没有特定的前缀时,你将返回适合该特定应用程序上下文的资源类型。例如,假设对ClassPathXmlApplicationContext实例执行了以下代码片段:
Resource template = ctx.getResource("some/resource/path/myTemplate.txt");
ClassPathXmlApplicationContext返回ClassPathResource,FileSystemXmlApplicationContext返回FileSystemResource,WebApplicationContext返回ServletContextResource。 他会返回和ApplicationContext相对应的Resource实现。
当然,你可以强制ClassPathResource使用,而不管ApplicationContext到底是什么。使用的方法就是在资源路径前面加前缀。
Resource template1 = ctx.getResource("classpath:some/resource/path/myTemplate.txt");
Resource template2 = ctx.getResource("http://myhost.com/resource/path/myTemplate.txt");
Resource template3 = ctx.getResource("file:///some/resource/path/myTemplate.txt");
//加入Java开发交流君样:756584822一起吹水聊天
Resource[] template4 = ctx.getResources("file:///some/resource/path/my**a.txt");
ResourceLoaderAware接口
ResourceLoaderAware接口是一个特殊的回调接口,表明该组件需要提供一个ResourceLoader的引用。 下面是ResourceLoaderAware的定义:
public interface ResourceLoaderAware {
void setResourceLoader(ResourceLoader resourceLoader);
}
一个Bean如果实现了ResourceLoaderAware接口,容器在加载Bean的时候会给这个Bean注入一个ResourceLoad实现类(容器设置的ResourceLoad就是容器本身,因为所有的Spring application contexts 都实现了ResourceLoader 接口),利用这个实现类也可以加载Resource资源。
Resources as Dependencies#
不知道在讲什么,后续再整理。。。
构造 ApplicationContext#
//从classpath下寻找配置文件构造ApplicationContext
ApplicationContext ctx = new
//加入Java开发交流君样:756584822一起吹水聊天ClassPathXmlApplicationContext("conf/appContext.xml");
//从当前工作目录寻找配置文件构造FileSystemXmlApplicationContext
ApplicationContext ctx = new FileSystemXmlApplicationContext("conf/appContext.xml");
//由于加了classpath前缀,所以从classpath下寻找配置构造FileSystemXmlApplicationContext
ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:conf/appContext.xml");
//以MessengerService类所在的路径为基准路径,寻找services.xml和daos.xml作为配置文件
ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] {"services.xml", "daos.xml"}, MessengerService.class);
通配符形式构造资源#
ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath*:conf/appContext.xml");
image
java resources介绍_Java之Resource接口相关推荐
- java英语介绍_java,英文介绍项目.doc
java,英文介绍项目 java,英文介绍项目 篇一:Java开发常见英文 Java基础常见英语词汇(共70个) Author:ZW OO: object-oriented ,面向对象OOP: obj ...
- java技术介绍_Java技术汇总
这篇文章总结了多年来使用Java的一些心得体会,主要是和一些Java基础知识点相关的,也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行业的准新手们,希望可以给大家一些经验,能让大家更好 ...
- java英语介绍_java自我介绍英语口语
<java自我介绍英语口语>由会员分享,可在线阅读,更多相关<java自我介绍英语口语(6页珍藏版)>请在人人文库网上搜索. 1.java自我介绍英语口语 java技术的同学们 ...
- java过滤器命名_Java命名目录接口(JNDI)教程
命名和目录操作 您可以使用JNDI执行以下操作:读取操作和更新命名空间的操作.本节介绍这两个操作: l查询对象 l列出上下文内容 l添加.覆盖和移除绑定 l重命名对象 l创建和销毁子上下文 配置 在命 ...
- java 集合 介绍_java集合类基本简介
java集合类基本简介 序号 类描述 1 AbstractCollection 实现了大部分的集合接口. 2 AbstractList 继承于AbstractCollection 并且实现了大部分Li ...
- java resources 路径_Java工程读取resources中资源文件路径问题
正常在Java工程中读取某路径下的文件时,可以采用绝对路径和相对路径,绝对路径没什么好说的,相对路径,即相对于当前类的路径.在本地工程和服务器中读取文件的方式有所不同,以下图配置文件为例. 本地读取资 ...
- java自我介绍_JAVA面试技巧之自我介绍
[如何进行自我介绍] 自我介绍这个问题,不用多说了,面试必定会问!如果想要在自我介绍的时候就能够打动面试官,吸引面试官对我们的兴趣,那么像我们这种接受过Java培训的程序员的自我介绍当然不能和应届生或 ...
- java中塑形_Java学习5——接口和多态
1 接口 接口相当于一个完全抽象的,没有任何实现的类 所有的成员函数都是抽象函数 所有的成员变量都是public static final而且一定要赋予初值 接口中的静态函数必须有函数体 接口在声明时 ...
- java抽象机制_Java很好学:接口+抽象类+事件监听机制
接口?抽象类? 首先知道知道下接口.抽象类的概念 接口:只含有常量和抽象方法(只有方法名和参数不含方法体的方法) 抽象类:可以定义常量和抽象方法(和接口一样),还可以定义变量和普通方法和构造方法(和一 ...
最新文章
- Unity导出apk出现的问题,JDK,Android SDK,NDK,无“安装模块”
- 翻译下 golang package time
- jupyter !wget 等系统命令使用技巧
- 【2012百度之星/初赛上】C:集合的交与并
- python2和python3的一些区别
- 20150728月度会议
- Java数据库连接池c3p0和druid
- 博士论文答辩||基于深度强化学习的复杂作业车间调度问题研究
- 第八届全国噪声与振动控制工程学术会议大会报告
- 计算机维修管理平台软件,美萍电脑行业管理软件(电脑业务管理系统、电脑维修管理系统、组装业务、电脑装机管理软件)--管理软件,美萍是专家!...
- 计算机中0和1的表示
- 20年,中国互联网主流产品的演变和逻辑
- 鸿图之下服务器维护10月25,鸿图之下11月25日维护更新公告
- 【paper 2】Learning from Simulated and Unsupervised Images through Adversarial Training
- matlab 噪声检测,噪声环境下的信号检测及其matlab仿真 signal detection and matlab simulation in noise environment.pdf...
- 计算机课程打字教学,打字教程第1课 认识键盘
- MATLAB中CVX工具箱解决凸优化问题的基本知识——语法、变量声明、目标函数、约束条件、cvx编程错误及解决方法
- Vue v-if和-vshow的差异比较
- 如何查看python有哪些内置函数_如何查看 Python 全部内置变量和内置函数?
- 2018 年,做平凡世界里的超人