spring基础-IO

spring对JDK中的资源访问

JDK的资源访问

在JDK中对资源的访问方式

URL:抽象对网络访问的资源目录。但是缺少例如isExist() isOpen()等方法
IO:提供了对于文件 二进制流等的抽象。
  但是缺少了类相对路径 servlet相对路径的的资源访问。

URL获得资源方式

//获得InputStream方法
URL url = new URL("");
URLConnection connection = url.openConnection();
connection.getInputStream();

//查看文件类型方法
URL url = new URL("");
//获得URL协议
String protocol = url.getProtocol();
//如果为文件协议
if("file".equal(protocol)){
}else if(protocol.startWith("vfs:")){//如果为vfs协议
}

ClassPath获得资源

ClassLoader loader = this.getClass().getClassLoader();
InputStream in = loader.getResourceAsStream();

Servlet获得相对资源

InputStream in = servletContext.getResourceAsStream();

JDK提供了很多中资源访问的接口,但是获得资源的方法并不统一,也缺少一些很使用的资源访问方式

spring 解决之道

spring对所有的资源抽象为Resource接口,这个接口定义了一系列的方法,统一了对资源的访问

Resource接口
通过内置提供大量的实现提供访问资源的子类,提供了很多常用的资源访问方式
这里写图片描述

ResourceLoader

spring实现如此众多的资源访问类,那我们客户端如何进行调用呢。
一.客户端必须知道这些子类知识,手动去创建这些资源子类
二.服务器端提供一个统一解析的接口,通过一定的命名规则,
 自动创建这些子类。这样客户端就需要很少具体实现的知识。
真正做到了面向接口编程,客户端不依赖子类实现。

这里写图片描述

总结

统一访问问题

spring通过定义一个Resource解决了IO URL获得资源访问接口的不一致
并提供了一些基本方法

加载资源问题

spring通过一个ResourceLoader接口DefaultResourceLoader 
实现类,解决了资源加载问题,客户端只传入字符串便可加载资源,
避免了客户端和实现之间的耦合。

编码层面上

Resource 接口
AbstractResource 抽象,对Resource的骨架实现
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章