目录
百战程序员,全站22050+开发课程+文档 ,学习精选优质好课快人一步!观看视频 快捷键ALT+N

JAVA全系列 教程

3762个小节阅读:7094.6k

收藏
全部开发者教程

C语言快速入门

JAVA全系列 教程

面向对象的程序设计语言

Python全系列 教程

Python3.x版本,未来主流的版本

人工智能 教程

顺势而为,AI创新未来

大厂算法 教程

算法,程序员自我提升必经之路

C++ 教程

一门通用计算机编程语言

微服务 教程

目前业界流行的框架组合

web前端全系列 教程

通向WEB技术世界的钥匙

大数据全系列 教程

站在云端操控万千数据

AIGC全能工具班

A

A A

White Night

阅读(492)
赞(0)

4.Resources的具体实现

Spring框架的Resources就是基于策略模式实现的。我们根据策略模式总结出Spring框架需要知道的类,把这些类都讲完了,Spring框架Resources基本就完事了。同时也知道了Spring框架Resources如何对策略模式的应用。

Resources接口有很多子接口和具体实现类。整个Resources使用了设计模式中策略模式

image-20230323091941244

Spring框架在实现策略模式时肯定要比我们写的要稍微复杂一些,通过整理后的图形也可以看懂的。

springzhognceluemoshi

4.1 UrlResource

UrlResource是java.net.URL在Spring框架中的实现。可以通过URL来访问任何资源。每周资源都有固定的前缀表示:

  • file: 访问文件系统的资源文件,file:///C:/user/smallming/a.txt,磁盘名开头为绝对路径,没有以磁盘名开头为当前应用根目录(无论是否以斜杠开头)
  • https: 通过https(超文本安全传输协议)协议访问资源 https://www.baidu.com
  • ftp: 通过ftp(文件传输协议)协议访问资源 ftp://ip:port

这个类属于万能类,当我们在使用Spring框架访问资源时,尤其是在使用String类型参数时,由Spring框架进行判断到底使用哪个Resources的实现类。如果发现路径没有标准前缀,则使用UrlResource来访问这个资源

4.2 ClassPathResource

ClassPathResource主要用于操作类路径资源。但是无法操作jar包中类路径资源。

在Maven项目中类路径资源:

  • src/main/java 中文件最终会被编译到类路径中
  • src/main/resources中文件最终会被编译到类路径中

在IDEA中看到的target/classes中内容就是类路径资源

image-20230323093941361

当我们想要操作类路径资源时,可以直接使用ClassPathResource的有参构造方法

如果没有使用有参构造方法,属于隐士访问资源,需要在String类型中明确添加 classpath: 作为前缀

4.3 FileSystemResource

FileSystemResource 是 java.io.File 和 java.nio.File.Path 的具体实现。

主要用于获取文件系统资源,返回File或URL类型。同时因为实现了WritableResource接口,不仅仅支持读操作还支持写操作。

文件系统,简单理解为服务器内部文件,例如:C:\\Users\\smallming\\a.txtfile:///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");

4.4 PathResource

PathResource是一个纯NIO.2中Path的支持,专门是用于Path的。而上面学习的FileSystemResource是从5.1版本开始支持的,并且FileSystemResource实际还是使用Files进行文件操作。

所有PathResource是一个纯粹的NIO.2中Path实现。用于访问文件系统资源,并返回File或URL。

4.5 ServletContextResource

ServletContextResource 是对jakarta.servlet.ServletContext资源访问的实现。

通过相对路径访问web项目根目录中资源。。

在项目中没有导入Spring框架web模块(spring-web)时,是无法搜索到这个类的。

4.6 InputStreamResource

InputStreamResource是对Java中java.io.InputStream的实现,只有其他Resource实现都没有办法使用时,才可能会用InputStreamResource。

InputStreamResource访问的资源流一直处于open状态,所以当希望保存资源或者多次读取资源时不要使用。

所以InputStreamResource有一定局限性,主要用于一次性资源读取。

4.7 ByteArrayResource

ByteArrayResource主要用于把byte[]转换为Resource。

 

北京市昌平区回龙观镇南店村综合商业楼2楼226室

©2014-2023 百战卓越(北京)科技有限公司 All Rights Reserved.

京ICP备14032124号-2