JAVA全系列 教程
3762个小节阅读:7094.6k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
Spring框架的Resources就是基于策略模式实现的。我们根据策略模式总结出Spring框架需要知道的类,把这些类都讲完了,Spring框架Resources基本就完事了。同时也知道了Spring框架Resources如何对策略模式的应用。
Resources接口有很多子接口和具体实现类。整个Resources使用了设计模式中策略模式。
Spring框架在实现策略模式时肯定要比我们写的要稍微复杂一些,通过整理后的图形也可以看懂的。
UrlResource是java.net.URL在Spring框架中的实现。可以通过URL来访问任何资源。每周资源都有固定的前缀表示:
file:///C:/user/smallming/a.txt
,磁盘名开头为绝对路径,没有以磁盘名开头为当前应用根目录(无论是否以斜杠开头)https://www.baidu.com
ftp://ip:port
这个类属于万能类,当我们在使用Spring框架访问资源时,尤其是在使用String类型参数时,由Spring框架进行判断到底使用哪个Resources的实现类。如果发现路径没有标准前缀,则使用UrlResource来访问这个资源
ClassPathResource主要用于操作类路径资源。但是无法操作jar包中类路径资源。
在Maven项目中类路径资源:
在IDEA中看到的target/classes中内容就是类路径资源
当我们想要操作类路径资源时,可以直接使用ClassPathResource的有参构造方法
xxxxxxxxxx
public ClassPathResource(String path) {
this(path, (ClassLoader) null);
}
如果没有使用有参构造方法,属于隐士访问资源,需要在String类型中明确添加 classpath: 作为前缀
FileSystemResource 是 java.io.File 和 java.nio.File.Path 的具体实现。
主要用于获取文件系统资源,返回File或URL类型。同时因为实现了WritableResource接口,不仅仅支持读操作还支持写操作。
文件系统,简单理解为服务器内部文件,例如:C:\\Users\\smallming\\a.txt
或file:///C:/Users/smallming/a.txt
从Spring Framework 5.0 开始FileSystemResource 使用NIO.2 进行操作文件。从Spring Framework 5.1 开始支持NIO.2的Path进行构建,虽然支持Path构建但是使用的是Files进行文件操作。
小复习:
NIO.2 是Java 7开始支持一种NIO升级版。用于替代原来java.io.File进行文件操作,来提升性能和增加操作的简便性。里面常用的就是Path、Paths、Files
使用File获取文件对象:
File file = new File("C:\\Users\\smallming","a.txt");
使用NIO.2获取文件:Path path = Paths.get("C:\Users\smallming","a.txt");
PathResource是一个纯NIO.2中Path的支持,专门是用于Path的。而上面学习的FileSystemResource是从5.1版本开始支持的,并且FileSystemResource实际还是使用Files进行文件操作。
所有PathResource是一个纯粹的NIO.2中Path实现。用于访问文件系统资源,并返回File或URL。
ServletContextResource 是对jakarta.servlet.ServletContext资源访问的实现。
通过相对路径访问web项目根目录中资源。。
在项目中没有导入Spring框架web模块(spring-web)时,是无法搜索到这个类的。
InputStreamResource是对Java中java.io.InputStream的实现,只有其他Resource实现都没有办法使用时,才可能会用InputStreamResource。
InputStreamResource访问的资源流一直处于open状态,所以当希望保存资源或者多次读取资源时不要使用。
所以InputStreamResource有一定局限性,主要用于一次性资源读取。
ByteArrayResource主要用于把byte[]转换为Resource。