spring基础-IO

本文探讨了Spring如何统一JDK中资源访问接口的不一致,并通过Resource接口及ResourceLoader实现类解决资源加载问题,使得客户端只需通过字符串即可加载资源,避免了与实现之间的耦合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的骨架实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值