• 攻城狮在路上(贰) Spring(三)--- Spring 资源访问利器Resource接口


    Spring为了更好的满足各种底层资源的访问需求。设计了一个Resource接口,提供了更强的访问底层资源的能力。
    Spring框架使用Resource装载各种资源,包括配置文件资源、国际化属性文件资源等。
    一、Resource接口的主要方法有
      boolean exists():资源是否存在。
      boolean isOpen():资源是否打开。
      URL getURL():如果底层资源可以表示为URL,该方法返回对应的URL对象。
      File getFile():如果底层资源对应一个文件,该方法返回对应的File对象。
      InputStream getInputStream() throws IOException:返回资源对应的输入流。
    二、Resource继承体系
      1、Resource类图:图1

                                 
      2、实现类说明
        ByteArrayResource:二进制数组表示的资源,二进制数组资源可以在内存中通过程序构造。
        ClassPathResource:类路径下的资源,资源以相对于类路径的方式表示(一般是以相对于根路径的方式),
        FileSystemResouce:文件系统资源,资源以文件系统路径的方式表示。
        InputStreamResource:对应了一个InputStream的资源。
        ServletContextResource:为访问Web容器上下文中的资源二设计的类,负责以相对于Web应用根目录的路径来加载资源。
        UrlResource:封装了java.net.URL,它使用户能够访问任何可以通过URL表示的资源,如文件系统的资源,HTTP资源,FTP资源。
        EncodedResource:对资源进行编码,以保证资源内容操作的正确性。
        说明:Spring的Resource接口及其实现类可以在脱离了Spring框架的情况下使用。
      3、实例代码

    Resorce res = new FileSystemResource("d:/test.txt");
    //对应路径classpathconffile2.txt
    Resource res2 = new ClassPathResource("conf/file2.txt");
    //web应用环境中:
    Resource res3 = new ServletContextResouce(application, "/WEB-INF/classes/conf/file2.txt");
    //对资源进行编码:
    EncodedResource encRes = new EncodedResource(res, "UTF-8");

    三、资源加载
      按照上面的介绍,访问不同类型的资源时,需要使用相应的Resource实现类,比较麻烦。为了可以在不显示使用Resource实现类的情况下,仅通过资源地址的特殊标识就可以加载相应的资源,Spring提供了一个强大的加载资源的机制,可以通过"classpath:","file:"等资源地址前缀识别不同的资源类型,还支持ant风格的带通配符的资源地址。
      1、资源地址表达式

    地址前缀 示例 对应资源类型
    classpath: classpath:com/xxx/demo.xml 从类路径中加载资源,classpath:和classpath:/是等价的,都是相对于类的根路径。资源文件可以在标准文件系统中,也可以在jar或者zip文件中。
    file: file:/conf/com/xxx/demo.xml 使用UrlResource从文件系统目录中装载资源,可以采用绝对或者相对路径。
    http:// http://www.xxx.com/resource/demo.xml 使用UrlResource从Web服务器中装载资源
    ftp:// ftp://www.xxx.com/resource/demo.xml 使用UrlResource从Ftp服务器中装载资源
    没有前缀 com/xxx/demo.xml 根据ApplicationContext具体实现类采用对应的类型的Resource。


        A、Ant风格支持3种匹配符:
          ?:匹配文件名中的一个字符
          *:匹配文件名中的任意个字符。
          **:匹配多层路径。
        B、实例:
          classpath:com/t?et.xml
          file:D:/conf/*.xml
          classpath:com/**/test.xml
        C、注意classpath:和classpath*:的区别。
      2、资源加载器
        类图:

                                                         
        实例代码:

    ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
    Resource[] resources = resolver.getResources("classpath*:com/xxx/**/*.xml");



  • 相关阅读:
    Android-Universal-Image-Loader学习笔记(两)--LruDiscCache
    linux 多个源文件在编译时会产生一个目标文件
    springMVC 获取本地项目路径 及后整理上传文件的方法
    Cf 444C DZY Loves Colors(段树)
    什么是EF, 和 Entity Framework Demo简单构建一个良好的发展环境
    Mac下一个/usr/include失踪
    ArcGIS 10 破解安装(win7 64位)
    Android ProgressBar 反向进度条/进度条从右到左走
    Java的位运算符具体解释实例——与(&)、非(~)、或(|)、异或(^)
    poj 3273 Monthly Expense (二分)
  • 原文地址:https://www.cnblogs.com/tq03/p/3795362.html
Copyright © 2020-2023  润新知