持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情
我们在开发中,常常会使用一些“资源”,如一些文件,图片,音频等等。Spring 为我们提供了“统一资源加载”的功能,这篇文章我们来看一下相关的概念。
统一资源加载策略
Spring 提供的这个功能,要从一个标准类java.net.URL 说起。
URL 我都知道,是Uniform Resource Locator(统一资源定位器)。
对于URL 的理解,虽然说是“统一资源定位符”,但是它的实现却仅仅局限在通过网络形式发布的资源上,来行使查找和定位的工作。并且其只提供了http、ftp、file 等协议的资源查找和定位功能。
实际上,资源可以以任何形式存在、可以存在于任何位置。比如以文件形式存在于文件系统中;以字节流的形式存在管道中等等。也可以以二进制的形式存在,以java 字节码的形式存在;可以存在java 某个包的classpath 下等等情况。
另外,从某个角度来说,这个类也存在着一种“职责划分不清”的问题。对于资源的查找和定位本身是两个不同种类的工作,而在URL 类中却对这两种行为没有一个明确清晰的界限。同时,目前如果查找到了资源,对于查找到的资源的返回形式是多种多样的,并没有一个统一的抽象存在。按照应有的软件开发原则来说,在完成资源查找之后,返回给客户端的应该是一个统一的资源抽象的接口。对于请求的客户端来说,它需要什么样的处理,应该由客户端获得的资源的抽象接口来确定,这个不应该是“资源的定位者或者资源查找者”同时需要关心的工作。
总结
所以,在上文描述中,我们知道,URL 类存在一些不足之处。所以Spring 提出了一套基于org.springframework.core.io.Resource 和org.springframework.core.io.ResourceLoader 接口的资源抽象策略及资源加载策略。这个就是我们常说的“统一资源加载策略”。