zoukankan      html  css  js  c++  java
  • 后端——框架——容器框架——spring_core——Resource

      Resource的知识点有三个部分,类体系结构,路径字符串与Resource对象的转换, 通配符。

    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。

    转换策略如下:

      第一步:首先判定是否存在特殊的前缀,例如classpath:前缀代表ClasspathResource,https:前缀代表URLResource。当没有前缀时,跳转到第二步。

      第二步:由于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,这个类会根据路径中其他不包含通配符的部分再次进行过滤,剩余的资源文件列表即为结果。

  • 相关阅读:
    Java代理(jdk静态代理、动态代理和cglib动态代理)
    Hive安装
    Spark 集群安装
    Flume 远程写HDFS
    Spark Idea Maven 开发环境搭建
    oracle 通不过网络的原因
    oracle一些基本问题
    linux-redhat配置yum源
    liunx虚拟机网络连接
    redhat安装jdk、tomcat、mysql
  • 原文地址:https://www.cnblogs.com/rain144576/p/14758701.html
Copyright © 2011-2022 走看看