Resource体系学习
来源:互联网 发布:数据统计方法有哪些 编辑:程序博客网 时间:2024/06/14 16:40
图稍后附.
Resource体系是spring框架中负责资源加载的模块.
一.根接口
1.InputStreamSource接口
该接口是从流当中获取对象的最简单的接口,是spring最具扩展性的基础接口.
对于单一用途的流来说,该接口可以被应用于任何给定的输入流.spring的ByteArrayResource或者其他任何的基于文件的Resource实现都可以作为一个明确的实例来使用.允许一个实例对内容流多次读.
2. Resource接口
该接口可以将实际的资源类型(例如一个文件或者一个类资源的路径)当中将资源抽象出来.
如果一个资源以物理形式存在的话,对于每个资源都可以打开一个输入流,对于特定的某些资源,只能返回一个URL或者是文件句柄.接口实际的行为取决于特定的实现.
Resource接口有三个子接口,如下:
1. ContextResource接口:该接口载入了一个封闭的上下文.例如servletContext或者PortleContext,也包括普通的类路径或者相关的文件系统路径(特别是对没有明确的prefix,因此会应用本地ResourceLoader的上下文).
源码如下:
public interface ContextResource extends Resource { /** * Return the path within the enclosing 'context'. * <p>This is typically path relative to a context-specific root directory, * e.g. a ServletContext root or a PortletContext root. */ String getPathWithinContext();}
可以看到只有一个方法用于提供上下文的路径
2. EncodedResource接口:该接口用于描述整个资源内容的编码.如果客户端强烈需要额外的解码能力来检索资源内容,此时该接口提供的信息就会很有用了.
3. WritableResource接口:支持写资源的接口,提供了输出流的访问器.
可以看到,spring对于不同的需求,都指定了不同的接口用来支持.
下面对体系图中的各个类和接口的用途加以说明,基本上都属于源码中注释的翻译.
- AbstractSource抽象类:
该类是Resource接口的一个预实现.
主要来检测资源是否存在. - DescriptiveResource类: 持有一个资源的描述,但实际上并不会指向一个可读的资源.
- 还有一些其他的类,例如ByteArrayResource,FileSystemResource类等,从类名字可以看出来都是针对不同形式的资源.
- AbstractFielResolvingResource抽象类:
该类主要把URL解析到文件的引用.例如UrlResource or ClassPathResource.在URL中检测file和vfs协议,解析文件系统的引用.下面分析他的4个实现类.
4.1 ClassPathResource类:针对类路径资源的一个实现类,使用给定的类加载器或者给定的类来加载资源.如果类路径存在于文件系统中,支持File类,但是不支持JAR形式的资源.对于URL类型的资源总是提供支持.
4.2 ServletContextResource类: 针对ServletContext类型的资源实现.在web应用根目录中解释相关的路径.始终支持流访问和URL访问,但仅当扩展Web应用程序存档时才允许访问java.io.File。
4.3 UrlResource类:针对URL定位器的实现,支持URL访问,在file:协议下,也支持文件的访问.
阅读全文
0 0
- Resource体系学习
- Resource体系
- 学习体系
- [学习体系一]初识体系
- [学习体系二]体系原型
- Spring抽象的资源接口Resource的继承体系
- Qt Resource System Qt资源体系(qrc rcc)
- LAMP体系学习(第一阶段)
- linux学习知识体系
- java体系学习路线
- linux cron学习体系
- BBED学习-知识体系
- BBED学习-知识体系
- ARM体系学习一
- 学习android体系结构图
- Spark学习体系
- 我的学习体系
- 机器学习知识体系
- android数据库加密之—sqlcipher
- Mysql 锁详解
- windows 服务安装和卸载
- [Mysql必知必会系列]排序检索数据
- Git常用命令
- Resource体系学习
- bzoj2730 [HNOI2012]矿场搭建 ( 割点 & 点双连通分量 )
- Reinforcement Learning学习笔记(一)综述
- Java集合(一)---ArrayList
- bootstrap, boosting, bagging,randomforrrest 几种方法的区别与联系
- NProgress.start();请求的进度条
- java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 解决方法
- BP网络
- MySQL利用explain来分析