zoukankan      html  css  js  c++  java
  • 资源访问工具类

    ---------------siwuxie095

       

       

       

       

       

       

       

       

    JDK 所提供的访问资源的类,并不能很好的满足各种底层资源的访问需求,

    如:缺少从类路径 Web 容器的上下文中获取资源的操作类

       

    因此,Spring 设计了一个 Resource 接口,它为应用提供了更强大的访问

    底层资源的能力,该接口拥有对应不同资源类型的实现类

       

       

    Resource 接口的主要方法:

       

    1)boolean exists():判断资源是否存在

       

    2)boolean isOpen():判断资源是否已经打开

       

    3)URL getURL():如果底层资源可以表示成 URL,则返回对应的 URL 对象

    4)File getFile():如果底层资源对应一个文件,则返回对应的 File 对象

    5)InputStream getInputStream():返回资源对应的输入流

       

       

       

    Spring 框架使用 Resource 来装载各种资源,这些资源包括:配置文件

    资源、 国际化属性文件资源

       

       

       

    Resource 接口的具体实现类:

       

    1)ByteArrayResource

       

    ByteArrayResource,即 二进制数组表示的资源,二进制数组资源

    可以在内存中通过程序构造

       

    2)ClassPathResource

       

    ClassPathResource,即 类路径下的资源,资源以相对于类路径的方式表示

       

    3)FileSystemResource

       

    FileSystemResource,即 文件系统资源,资源以文件系统路径的方式表示

       

       

    4)InputStreamResource

       

    InputStreamResource,即 输入流资源,资源以输入流返回的方式表示

       

       

    5)ServletContextResource

       

    ServletContextResource,即 Web 容器上下文中的资源,负责以相对

    Web 应用根目录的路径来加载资源

       

    支持以 流 和 URL 的方式来进行访问,在 war 包解包的情况下,也可以

    通过 File 的方式来进行访问,该类还可以直接从 jar 包中来访问资源

       

       

    6)UrlResource

       

    UrlResource 封装了 java.net.URL,它使用户能够访问任何可以通过

    URL 表示的资源,如:文件系统资源、HTTP 资源、FTP 资源

       

       

       

       

    有了以上几个抽象资源类后,就可以将 Spring 的配置信息放置在任何地方,

    如:数据库 或 LDAP,只要最终可以通过 Resource 接口返回配置信息即可

       

    为了访问不同类型的资源,必须使用相应的 Resource 实现类,这是比较麻烦的,

    Spring 提供了一个强大的加载资源的机制,不但能够通过 classpath、file 等不同

    地址前缀来识别不同的资源类型,而且还支持 Ant 风格的带通配符的资源地址

       

       

    Spring 支持的不同类型的资源地址前缀:

       

    1)classpath

       

    从类路径中加载资源,classpath: classpath:/ 等价,都是相对于

    类的根路径,而资源文件可以在标准的文件系统中,也可以在 jar 或

    zip 格式的类包中

       

    如:classpath:com/siwuxie095/bean.xml

    或:classpath:/com/siwuxie095/bean.xml

       

       

    2file

       

    使用 UrlResource 从文件系统目录中装载资源,可采用绝对

    或相对路径,file:file:/ 等价

       

       

    如:file:com/siwuxie095/bean.xml

    或:file:/com/siwuxie095/bean.xml

       

    3)http

       

    使用 UrlResource Web 服务器中装载资源

       

    如:http://www.siwuxie095.com/bean.xml

       

       

    4)ftp

       

    使用 UrlResource FTP 服务器中装载资源

       

    如:ftp://www.siwuxie095.com/bean.xml

       

       

    5)无前缀

       

    如:com/siwuxie095/bean.xml

       

    根据 ApplicationContext 的具体实现类采用

    对应类型的 Resource

       

    其中,有和 classpath: 对应的,还有另外一种

    比较难以理解的:classpath*:

       

    假设有多个 jar 包文件 或文件系统类路径都拥有

    一个相同的包名,如:com.siwuxie095

       

    二者的区别在于:

    classpath: 只会在第一个加载的 com.siwuxie095 包下查找,

    classpath*: 会扫描所有这些 jar 包以及类路径下出现的

    com.siwuxie095 包

       

    这对于分模块打包的应用非常有用,假设一个名为 siwuxie095

    的应用共分成 3 个模块

       

    每一个模块都对应一个配置文件,分别是:module1.xml、

    module2.xml 和 module3.xml

       

    它们都放到了 com.siwuxie095 目录下,每个模块单独打成 jar 包

       

    当使用 classpath*:com/siwuxie095/module*.xml,可以成功加载

    到这三个模块的配置文件

       

    而使用 classpath:com/siwuxie095/module*.xml,只会加载第一个

    模块的配置文件

       

       

       

    Ant 风格资源地址支持的匹配符:

       

    1?:匹配文件名中的一个字符

    2)*:匹配文件名中的任意字符

    3)**:匹配多层路径

       

       

    Ant 风格的资源路径示例:

       

    1)classpath:com/t*st.xml

    2)file:D:/conf/*.xml

    3)classpath:com/**/test.xml

    4)classpath:org/springframework/**/*.xml

       

       

       

       

    Spring 定义了一套资源加载的接口,并提供了实现类,如下:

       

       

       

    ResourceLoader 接口仅有一个 getResource(String location) 方法,

    可以根据一个资源地址加载文件资源,但资源地址仅支持带资源类型

    前缀的表达式,而不支持 Ant 风格的资源路径表达式

       

    ResourcePatternResolver 扩展了 ResourceLoader 接口,它定义了

    一个新的接口方法:getResources(String locationPattern),该方法

    支持带资源类型前缀以及 Ant 风格的资源路径表达式

       

    PathMatchingResourcePatternResolver Spring 提供的

    ResourcePatternResolver 接口的标准实现类

       

    PathMatchingResourcePatternResolver 用法如下:

       

       

       

       

       

       

       

    【made by siwuxie095】

  • 相关阅读:
    System.Web.HttpException: 应用程序已预编译,因此不允许使用目录“/App_Code/”。
    ASP.NET导出Excel文件
    简单易学的OA报表
    input添加邮箱的时候自动显示后缀
    Sql Server中存储过程执行很快,但程序调用时执行非常慢的问题(连接超时)
    C#如何卸载已安装的Windows Service服务
    CSS专题(二):元素大小与位置offsetLeft offsetTop offsetWidth offsetHeight clientWidth clientHeight scrollWidth scrollHeight scrollLeft scrollTop
    Eclipse maven构建springmvc项目
    49个jQuery代码经典片段
    CSS专题(一):Background
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/6741632.html
Copyright © 2011-2022 走看看