• 后端——框架——容器框架——spring_core——《官网》阅读笔记——第二章节(资源)


      第二章节介绍资源,知识点大致可以分为三个部分。

    1. 第一部分介绍Resource的类体系结构
    2. 第二部分介绍路径字符串转Resource对象。
    3. 第三部分介绍通配符。

    1、类体系结构

    父接口

    • InputStreamSource:代表输入流,只有一个方法,getInputStream,返回InputStream对象

    Resource接口方法

    • Exists:判断资源文件是否存在,即路径是否指向有效的文件,存在返回true。
    • isOpen:资源是否处于Open状态,即开始读取资源文件的输入流
    • getURL:只适用于URLResource,返回url地址
    • getFile:只适用于FileSystemResource,返回文件的路径,传入的是相对路径返回相对路径,传入绝对路径则返回绝对路径。
    • createRelative:根据相对路径,转换为Resource对象。
    • getFilename:返回资源的文件名称
    • getDescription:返回资源的描述。

      实现类

    • URLResource:代表网络资源,如果字符串中有协议前缀,则字符串会转换为URLResource对象,例如https,http,ftp,file。
    • ClasspathResource:代表编译路径下面的资源文件。只代表项目的编译路径,不代表其他jar包或者服务器的编译路径,例如Tomcat就有自己的classLoader。
    • FileSystemResource:代表文件系统中相对路径或绝对路径代表的资源文件。
    • ServletContextResource:只适用于web项目,代表项目根路径下面的资源文件,一般为WEB-INF/
    • InputStreamResource:代表输入流,是一种默认值,只有资源文件不属于其他任何一种时,才使用此类。
    • ByteArrayResource:它底层读取资源文件的输入流类型为ByteArrayInputStream。当读取字节流时使用。

    2、路径转Resource对象

    一个资源文件可以根据路径转换为不同的Resource对象。例如磁盘上的文件,既可以表示FileSystemResource,也可以提供file://转换为URLResource。转换策略如下:

    1. 第一步:首先判定是否存在特殊的前缀,例如classpath:前缀代表ClasspathResource,https:前缀代表URLResource。当没有前缀时,跳转到第二步。
    2. 第二步:由于applicationContext继承了ResourceLoader接口,所以它也是一种资源加载器。它会根据applicationContext的类型决定。例如ClasspathXmlApplicationContext对应ClasspathResource,FileSystemXmlApplicationContext对应FileSystemResource。

    前缀具有较高优先级,示例中ApplicationContext对象为Classpath,但是由于路径上有前缀file:,所以会转换为URLResource。

    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("file://spring//application.xml");
    

    3、通配符

      在资源路径中使用通配符的方式有两种,第一种是classpath*,第二种是路径上的通配符(原著中称为Ant-style)。

      第一种是指项目使用组件化或模块化的方式,典型的就是spring框架,分为很多模块。这种情况下classpath*会搜索所有模块的编译路径,classpath只会搜索当前项目的编译路径。

      第二种路径上的通配符,如果是文件夹,使用**表示,如果是文件名,使用*号,例如test/**/application.xml,test/resources/*-context.xml。不论是哪种形式,它第一步都会调用ClassLoader.getResources方法,参数为路径末尾不包含通配符的部分,这会获取一个资源文件列表,然后在根据PathMatcher,这个类会根据路径中其他不包含通配符的部分再次进行过滤,剩余的资源文件列表即为结果。

  • 相关阅读:
    Vue小实例
    Bootstrap进度条
    Bootstrap导航栏
    Bootstrap表单
    java date类
    正则表达式(java)规则大全
    正则表达式(java)
    java Stringbuffer类
    java String类
    object类
  • 原文地址:https://www.cnblogs.com/rain144576/p/12272451.html
Copyright © 2020-2023  润新知