• 【Java】Spring之Resource(三)


      Java的各种URL前缀的标准类和标准处理程序不足以完全访问低级资源。例如,没有URL可用于访问需要从类路径或相对于a获取的资源的标准化实现 ServletContext虽然可以为专用URL 前缀注册新的处理程序(类似于现有的前缀处理程序http:),但这通常非常复杂,并且URL接口仍然缺少一些理想的功能,例如检查资源是否存在的方法指着。

    Resource接口

      Spring的Resource接口是一个更强大的接口,用于抽象对低级资源的访问。以下清单显示了Resource接口定义:

     1 public interface Resource extends InputStreamSource {
     2 
     3     boolean exists();
     4 
     5     boolean isOpen();
     6 
     7     URL getURL() throws IOException;
     8 
     9     File getFile() throws IOException;
    10 
    11     Resource createRelative(String relativePath) throws IOException;
    12 
    13     String getFilename();
    14 
    15     String getDescription();
    16 
    17 }

      如Resource界面定义所示,它扩展了InputStreamSource 界面。以下清单显示了InputStreamSource 界面的定义:

    1 public interface InputStreamSource {
    2 
    3     InputStream getInputStream() throws IOException;
    4 
    5 }

      Resource界面中一些最重要的方法是:

        getInputStream():找到并打开资源,返回InputStream从资源中读取的内容。预计每次调用都会返回一个新的 InputStream。呼叫者有责任关闭流。

        exists():返回boolean指示此资源是否实际以物理形式存在的指示。

        isOpen():返回一个boolean指示此资源是否表示具有打开流的句柄的指示符。如果true,InputStream不能多次读取,必须只读一次然后关闭以避免资源泄漏。false所有常规资源实现的返回值,但InputStreamResource。

        getDescription():返回此资源的描述,用于处理资源时的错误输出。这通常是完全限定的文件名或资源的实际URL。

        其他方法允许您获取表示资源的实际URL或File对象(如果底层实现兼容并支持该功能)。

    Resource实现

      Spring包括以下Resource实现:

    • UrlResource:UrlResource包装a java.net.URL并可用于访问通常可通过URL访问的任何对象,例如文件,HTTP目标,FTP目标等。
    • ClassPathResource:此类表示应从类路径获取的资源。它使用线程上下文类加载器,给定的类加载器或给定的类来加载资源。
    • FileSystemResource:这是一个Resource实现java.io.Filejava.nio.file.Path处理。它支持分辨率作为FileURL
    • ServletContextResource:这是一个资源Resource实现,用于ServletContext解释相关Web应用程序根目录中的相对路径。
    • InputStreamResource:InputStreamResourceResource给定实现InputStream只有在没有Resource适用的具体实施时才应使用它
    • ByteArrayResource:这是Resource给定字节数组的实现。ByteArrayInputStream为给定的字节数组创建一个 

    ResourceLoader

      该ResourceLoader接口旨在由可以返回(即加载)Resource实例的对象实现。以下清单显示了ResourceLoader 接口定义:

    1 public interface ResourceLoader {
    2 
    3     Resource getResource(String location);
    4 
    5 }

      调用getResource()特定的应用程序上下文,并且指定的位置路径没有特定的前缀时,您将返回一个Resource适合该特定应用程序上下文的类型。例如,假设针对ClassPathXmlApplicationContext实例执行了以下代码片段:

    1 Resource template = ctx.getResource("some/resource/path/myTemplate.txt");

      

    前缀示例说明

    classpath:

    classpath:com/myapp/config.xml

    从类路径加载

    file:

    file:///data/config.xml

    从文件系统加载

    http:

    https://myserver/logo.png

    加载为URL

    (none)

    /data/config.xml

    取决于潜在的ApplicationContext 

      应用程序上下文构造函数值中的资源路径可以是简单路径,每个路径都与目标进行一对一映射Resource,或者可以包含特殊的“classpath *:”前缀或内部Ant-样式正则表达式(使用Spring的PathMatcher实用程序匹配)。后者都是有效的通配符。

      “classpath *:” 此特殊前缀指定必须获取与给定名称匹配的所有类路径资源,然后合并以形成最终的应用程序上下文定义。

      Ant风格的资源地址,支持3种匹配符;

    • ?:匹配文件名中的一个字符;
    •  * :匹配文件名中的任意个字符
    •  **:匹配多层路径

      下面是几个示例:

      classpath:com/ssh/t?st.xml:匹配com/ssh路径下的com/ssh/test.xml、com/ssh/tast.xml等
      file:D:/conf/*Config.xml:匹配文件系统D:/conf路径下的所有文件以Config.xml为后缀的文件,比如匹配HibernateConf.xml,SpringConf.xml等;
      classpath:com/**/test/xml:匹配com类路径下(当前目录及其子孙目录)的test.xml文件,比如匹配:com/a/test.xml、com/a/b/c/d/test.xml等

       

  • 相关阅读:
    吴恩达《深度学习》第一门课(3)浅层神经网络
    吴恩达《深度学习》第一门课(2)神经网络的编程基础
    吴恩达《深度学习》第一门课(1)深度学习引言
    吴恩达《机器学习》课程总结(19)总结
    吴恩达《机器学习》课程总结(17)大规模机器学习
    吴恩达《机器学习》课程总结(16)推荐系统
    吴恩达《机器学习》课程总结(15)异常检测
    吴恩达《机器学习》课程总结(18)应用实例:图片文字识别
    吴恩达《机器学习》课程总结(14)降维
    吴恩达《机器学习》课程总结(13)聚类
  • 原文地址:https://www.cnblogs.com/h--d/p/11438005.html
Copyright © 2020-2023  润新知