【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等

  

原文地址:https://www.cnblogs.com/h--d/p/11438005.html

时间: 2024-10-29 13:54:41

【Java】Spring之Resource(三)的相关文章

Spring Data 系列(三) Spring+JPA(spring-data-commons)

本章是Spring Data系列的第三篇.系列文章,重点不是讲解JPA语法,所以跑开了JPA的很多语法等,重点放在环境搭建,通过对比方式,快速体会Spring 对JPA的强大功能. 准备代码过程中,保持了每个例子的独立性,和简单性,准备的源码包,下载即可使用.如果,对JPA语法想深入研究的话,直接下载在此基础上进行测试. 前言 Spring Data 系列(一) 入门:简单介绍了原生态的SQL使用,以及JdbcTemplate的使用,在这里写SQL的活还需要自己准备. Spring Data 系

Spring之Resource

Spring之所以抽象Resource接口,是因为传统的java使用URL和标准的handler来处置资源.但是有个局限是不能直接读取classpath下的资源.因此Spring定义了一套接口.这套接口分为两部分,Resource和ResourceLoader,其中是对资源的抽象,后者负责加载资源.Spring的ApplicationContext实现了ResourceLoader接口. Resource 首先看Resource的接口定义. public interface Resource e

Java spring quartz 定时任务

首先,需要导入quartz 的jar包 ① applicationContext.xml <!-- 轮询任务 --> <import resource="classpath:/conf/quartz/ctmanage-schedule.xml" /> ② ctmanage-schedule.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&q

java实现定时任务的三种方法

java实现定时任务的三种方法 详解java定时任务 定时器的实现.java定时器介绍与Spring中定时器的配置 java定时器简单了解 ------------------ java定时器执行多个方法

java spring中对properties属性文件加密及其解密

原创整理不易,转载请注明出处:java spring中对properties属性文件加密及其解密 代码下载地址:http://www.zuidaima.com/share/1781588957400064.htm 加密类: package com.zuidaima.commons.util; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import

Spring Security 3 (三) 用户数据存放于数据库

上章回顾: 上一章中,我们将用户名.密码以及用户对应的角色都配置于applicationContext-security.xml中,基本实现了我们能控制用户的访问权限.但是在现实开发中,我们不可能将用户信息硬编码在配置文件中,通常我们都是存放到数据中.同时我们应该对用户的密码进行加密存储. 目标: 1.将用户信息存放于数据库 2.对用户的密码进行加密 详细操作: 1.其他代码参考上一章中代码.本章中,首先我们要创建一张数据表来记录我们的用户信息.SpringSecurity提供的验证机制中,首先

Spring集成Memcached三种方式(一)

转载:http://blog.csdn.net/u013725455/article/details/52102170 Memcached Client目前有3种: Memcached Client for Java SpyMemcached XMemcached 这三种Client一直存在各种争议: Memcached Client for Java 比 SpyMemcached更稳定.更早.更广泛: SpyMemcached 比 Memcached Client for Java更高效: X

Spring的Resource 接口及其实现类

JDK 所提供的访问资源的类(如java.net.URL.File 等)并不能很好地满足各种底层资源的访问需求,比如缺少从类路径或者Web 容器的上下文中获取资源的操作类.有鉴于此,Spring 设计了一个Resource 接口,它为应用提供了更强的访问底层资源的能力.该接口拥有对应不同资源类型的实现类.先来了解一下Resource 接口的主要方法: boolean exists():资源是否存在: boolean isOpen():资源是否打开: URL getURL() throws IOE

[JAVA][Spring]Spring 3.0 注解注入详解

一.各种注解方式 [email protected]注解(不推荐使用,建议使用@Resource) @Autowired可以对成员变量.方法和构造函数进行标注,来完成自动装配的工作.@Autowired的标注位置不同,它们都会在Spring在初始化这个bean时,自动装配这个属性.要使@Autowired能够工作,还需要在配置文件中加入以下 Xml代码 <bean class="org.springframework.beans.factory.annotation.AutowiredAn