Spring的Resource接口位于包org.springframework.core.io中;
Spring定义Resource接口是为了提供更强的访问底层资源能力的抽象;
对spring来说Resource接口代表着物理存在的任何资源。
先看一下resource接口及其实现的类层次关系图:
对应的UML类图为:
其中,最常用的有四个:
ClassPathResource:通过 ClassPathResource 以类路径的方式进行访问;
FileSystemResource:通过 FileSystemResource 以文件系统绝对路径的方式进行访问;
ServletContextResource:通过 ServletContextResource 以相对于Web应用根目录的方式进行访问;
UrlResource :通过java.net.URL来访问资源,当然它也支持File格式,如“file:”。
1、先看一下Resource接口的定义:
public interface Resource extends InputStreamSource {
boolean exists();
boolean isReadable();
boolean isOpen();
URL getURL() throws IOException;
URI getURI() throws IOException;
File getFile() throws IOException;
long contentLength() throws IOException;
long lastModified() throws IOException;
Resource createRelative(String relativePath) throws IOException;
String getFilename();
String getDescription();
}
它是spring访问资源最基本的接口。实际访问的时候直接用Resource接口就可以,不必使用其子类。其实经常用到的(resource的真正目的)方法是public InputStream getInputStream()。
2、FileSystemResource
public InputStream getInputStream() throws IOException {
return new FileInputStream( this. file);
}
这里的file是使用传入(构造函数中)的path生成的File,然后使用该File构造FileInputStream作为方法的输出。
这里的path一般要给出绝对路径,当然也可以是相对路径,如果是相对路径要注意其根目录。例如在eclipse中,它的根目录就是你工程目录作为你的根目录。
3、ClassPathResource
public InputStream getInputStream() throws IOException {
InputStream is;
if ( this. clazz != null) {
is = this. clazz.getResourceAsStream( this. path);
}
else {
is = this. classLoader.getResourceAsStream( this. path);
}
if (is == null) {
throw new FileNotFoundException(getDescription() + " cannot be opened because it does not exist");
}
return is;
}
这里是通过Class或者ClassLoader的getResourceAsStream()方法来获得InputStream的。其path一般都是以“classpath:”开头,如果以“classpath*:”开头表示所有与给定名称匹配的classpath资源都应该被获取。
4、ServletContextResource
public InputStream getInputStream() throws IOException {
InputStream is = this.servletContext.getResourceAsStream(this.path);
if (is == null) {
throw new FileNotFoundException("Could not open " + getDescription());
}
return is;
}
ServletContextResource通过ServletContext的getResourceAsStream()来取得InputStream,这里path必须以“/”开头,并且相对于当前上下文的根目录。如常用的path="/WEB-INF/web.xml"。
5、UrlResource
public InputStream getInputStream() throws IOException {
URLConnection con = this. url.openConnection();
ResourceUtils. useCachesIfNecessary(con);
try {
return con.getInputStream();
}
catch (IOException ex) {
// Close the HTTP connection (if applicable).
if (con instanceof HttpURLConnection) {
((HttpURLConnection) con).disconnect();
}
throw ex;
}
}
UrlResource 封装了java.net.URL,它能够被用来访问任何通过URL可以获得的对象,例如:文件、HTTP对象、FTP对象等。
所有的URL都有个标准的 String表示,这些标准前缀可以标识不同的URL类型,包括file:访问文件系统路径,http: 通过HTTP协议访问的资源,ftp: 通过FTP访问的资源等等。
在Spring配置文件中,我们只需要给出字符串类型的path即可,Spring会通过ResourceEditor(java.beans.PropertyEditor的子类)和ResourceLoader把给定的path转换为相应的Resource。
转换规则如下:
参考:http://blog.163.com/flm_llx/blog/static/27120712200792211260614/
- 大小: 55.2 KB
- 大小: 244.5 KB
- 大小: 50.7 KB
分享到:
相关推荐
IoC是Spring的核心概念之一,它将对象的创建和管理权交给了容器,而不是由对象自身负责。这样可以降低对象之间的耦合度,提高代码的可测试性和可维护性。Spring通过XML配置、注解或Java配置类来实现IoC。 - **2.3 ...
以下将详细介绍Spring学习笔记中的主要知识点。 **面向抽象编程** 面向抽象编程是一种设计原则,强调在代码中使用接口或抽象类,而不是具体实现类。这使得系统更具有灵活性,易于扩展和维护。在Spring框架中,我们...
Spring 2.5 学习笔记是针对这个经典版本的框架进行深入理解的教程,而SSH则代表了Spring、Struts和Hibernate这三个Java Web开发中最常用的开源框架的整合。这篇笔记详细介绍了如何在项目中使用Spring 2.5以及如何与...
### Spring2.5.6 学习笔记精粹解析 #### 一、Spring框架环境搭建与JAR包配置 在开始深入Spring框架的学习之前,首先需要确保开发环境正确配置Spring框架。按照“传智播客Spring2.5.6学习笔记最新整理”的指引,...
### Spring框架案例学习文档笔记知识点总结 #### 第一课:面向抽象编程 - **核心概念**:面向抽象编程强调的是程序设计中通过抽象接口来进行设计和实现的方式,它避免了直接依赖具体实现类,增强了系统的灵活性和可...
### Spring2.5 学习笔记详解 #### 一、Spring 框架简介 Spring 是一个开源的轻量级 ...以上就是关于 Spring2.5 学习笔记的主要知识点,通过这些内容的学习,可以更好地理解和掌握 Spring 框架的基本原理和使用方法。
Spring 框架是Java开发中的一个重要组成部分,它是一个开源的控制反转(IoC)和面向切面(AOP)的容器框架。这个框架的主要目标是简化企业级应用程序的开发过程,通过提供一种更加灵活和可扩展的方式来管理对象的生命...
### Spring2.5 学习笔记关键知识点概览 #### 面向抽象编程与Spring框架 面向抽象编程是Spring框架的核心理念...以上是Spring2.5学习笔记中的核心知识点概述,每个主题都值得深入研究和实践,以掌握Spring框架的精髓。
**Spring框架中的IoC(控制反转)概念** 在软件开发中,IoC(Inversion of Control,控制反转)是一种设计模式,它将对象的创建和管理责任从代码中剥离出来,交由一个容器来处理。Spring框架是Java平台上的一个核心...
Spring框架是Java开发中最常用的轻量级框架之一,它的核心特性是依赖注入(Dependency Injection,简称DI),通过IOC(Inversion of Control,控制反转)容器管理对象的生命周期和对象间的依赖关系。本篇笔记将详细...
以上内容涵盖了Spring框架的基础配置、依赖管理和高级特性等方面的知识点,希望对你学习Spring有所帮助。通过深入理解这些概念和技术,可以更好地掌握Spring框架的核心能力,并能灵活应用于实际项目中。
### Spring2.5 学习笔记关键知识点梳理 #### 搭建Spring的运行环境 - **新建项目**: 使用IDE工具如Eclipse或IntelliJ IDEA创建一个新的Java Web项目。 - **Spring配置文件**: 在项目的`src/main/resources`目录下...
Spring、Spring MVC和MyBatis是Java EE中最受欢迎的框架之一。这些框架的整合使用广泛用于构建企业级应用。下面将详细介绍这些框架的核心概念、模块组成、实例化Bean的方式以及依赖注入的机制和优势。 Spring框架...
### Spring.NET 学习笔记 — 控制反转 #### 一、控制反转(IoC)概念解析 控制反转(Inversion of Control,简称IoC)是一种软件设计思想,它改变了传统对象之间的依赖关系管理方式,从而降低了组件之间的耦合度。在...
本总结笔记是Spring、Mybatis、SpringMVC的综合学习资源,涵盖了这些框架的基本概念、配置方式、优点与适用场景,以及它们各自组件和功能点的详细解释。适用于初学者入门学习,同时也可以作为面试时的参考资料,帮助...
1. **控制反转(Inversion of Control, IoC)**:IoC是Spring的核心特性之一,通过这种方式,对象的创建和管理交由Spring容器负责,从而降低了组件间的耦合度。 2. **依赖注入(Dependency Injection, DI)**:DI是...
### 马士兵Spring学习笔记知识点汇总 ...综上所述,马士兵Spring学习笔记涵盖了Spring的核心概念及其在实际项目中的应用,包括IoC、AOP、整合其他框架等方面的知识点。对于初学者来说,是一份非常有价值的参考资料。