`
rigger21
  • 浏览: 131524 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Spring中的Resource接口

阅读更多
<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>Spring中的org.springframework.core.io.Resource接口代表着物理存在的任何资源,其继承于org.springframework.core.io.InputStreamSource;其子类有如下几种:ByteArrayResource, ClassPathResource, DescriptiveResource, FileSystemResource, InputStreamResource, PortletContextResource, ServletContextResource, UrlResource 。常用的有以下四种:
  1. ClassPathResource:通过 ClassPathResource 以类路径的方式进行访问;
  2. FileSystemResource:通过 FileSystemResource 以文件系统绝对路径的方式进行访问;
  3. ServletContextResource:通过 ServletContextResource 以相对于Web应用根目录的方式进行访问。
  4. UrlResource :通过java.net.URL来访问资源,当然它也支持File格式,如“file:”

先看一下Resource接口的定义:

publicinterfaceResourceextendsInputStreamSource...{
booleanexists();

booleanisOpen();

URLgetURL()
throwsIOException;

FilegetFile()
throwsIOException;

ResourcecreateRelative(StringrelativePath)
throwsIOException;//根据相对路径创建资源

StringgetFilename();

StringgetDescription();
}

它提供我们访问资源最基本的接口。我们实际访问的时候直接用Resource接口就可以,不比使用其子类。在初始化时,其子类的实现各有不同。

首先看最常用的ClassPathResource :

publicInputStreamgetInputStream()throwsIOException...{
InputStreamis
=null;
if(this.clazz!=null)...{
is
=this.clazz.getResourceAsStream(this.path);
}

else...{
is
=this.classLoader.getResourceAsStream(this.path);
}

if(is==null)...{
thrownewFileNotFoundException(
getDescription()
+"cannotbeopenedbecauseitdoesnotexist");
}

returnis;
}

这个是ClassPathResource 获得InputStream的代码,可以看出,它是通过Class或者ClassLoader的getResourceAsStream()方法来获得InputStream的。关于这两个类的方法的区别我另外的一篇文章已经解释。其path一般都是以“classpath:”开头,如果以“classpath*:”开头表示所有与给定名称匹配的classpath资源都应该被获取。

其次来看FileSystemResource:

publicFileSystemResource(Stringpath)...{
Assert.notNull(path,
"Pathmustnotbenull");
this.file=newFile(path);
this.path=StringUtils.cleanPath(path);
}

publicInputStreamgetInputStream()throwsIOException...{
returnnewFileInputStream(this.file);
}

就是根据给定的Path来构造File,然后再构造FileInputStream。这儿的path一般要给出绝对路径,当然也可以是相对路径,但是如果使用相对路径要注意其根目录。例如在eclipse中,它的根目录就是你工程目录作为你的根目录。

再来看ServletContextResource:

publicInputStreamgetInputStream()throwsIOException...{
InputStreamis
=this.servletContext.getResourceAsStream(this.path);
if(is==null)...{
thrownewFileNotFoundException("Couldnotopen"+getDescription());
}

returnis;
}

ServletContextResource通过ServletContext的getResourceAsStream()来取得InputStream,这里path必须以“/”开头,并且相对于当前上下文的根目录。如常用path="/WEB-INF/web.xml"。

最后来看UrlResource:

publicUrlResource(Stringpath)throwsMalformedURLException...{
Assert.notNull(path,
"Pathmustnotbenull");
this.url=newURL(path);
this.cleanedUrl=getCleanedUrl(this.url,path);
}

publicInputStreamgetInputStream()throwsIOException...{
URLConnectioncon
=this.url.openConnection();
con.setUseCaches(
false);
returncon.getInputStream();
}

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。转换规则如下:

前缀 例子 说明

classpath:

classpath:com/myapp/config.xml

从classpath中加载。

file:

file:/data/config.xml

作为 URL 从文件系统中加载。

http:

http://myserver/logo.png

作为 URL 加载。

(none)

/data/config.xml

根据 ApplicationContext 进行判断。

摘自于Spring Framework参考手册



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1818714

分享到:
评论

相关推荐

    (转)Spring中@Autowired注解和@Resource注解的区别

    在Spring框架中,`@Autowired`和`@Resource`注解是两个常见的依赖注入(DI, Dependency Injection)工具,它们都是用来解决组件之间的耦合问题,使得代码更加灵活和可测试。然而,这两个注解在具体使用时有一些关键性...

    spring-resource

    在本场景中,我们关注的是如何利用Spring的`Resource`接口来读取配置文件。这在Java应用程序,尤其是Spring应用中是常见的需求,因为配置文件通常用于设置应用的环境变量、数据库连接信息等。 `Resource`接口是...

    spring Resource管理详解

    Spring的Resource接口是访问资源的抽象,它提供了一种统一的资源访问方式,可以处理不同来源的资源,包括本地文件系统、类路径、URL等。Resource对象并不直接包含资源内容,而是提供了打开输入流、获取资源路径等...

    Spring_ClassPathResource获得bean对象

    Spring的ClassPathResource则提供了一个接口,用于处理这些类路径下的资源。 创建和使用ClassPathResource通常涉及以下步骤: 1. **创建实例**: 创建ClassPathResource实例时,你需要提供一个字符串参数,这个...

    详解Spring关于@Resource注入为null解决办法

    Spring 框架中,@Resource 注解是一种常用的依赖注入方式,用于将对象注入到应用程序中。但是,在实际开发中,经常会遇到 @Resource 注解的对象为 null 的问题。本文将详细介绍 Spring 中 @Resource 注解解决 null ...

    19 Spring MVC应用拓展Resource应用于文件下载慕课专栏1

    Spring MVC中的Resource接口不仅提供了`getInputStream()`方法,还封装了许多其他功能,使得操作各种类型的资源变得更加方便。Resource接口的实现类如UrlResource、FileUrlResource、FileSystemResource等,分别对应...

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1. @Configurable object的单元测试 6.8.1.2. 多application context情况下的处理 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来...

    Spring5中文文档

    资源管理章节涵盖了资源的获取和抽象,包括Resource接口的介绍、内置的Resource实现、资源加载器以及如何在应用上下文中使用资源路径。 验证、数据绑定和类型转换部分讲解了如何使用Spring的验证器接口进行验证,...

    CXF+spring+restful创建一个web的接口项目源代码

    3. **服务实现**:实现了服务接口中的方法,处理具体的业务逻辑。 4. **部署描述符**:如web.xml,用于配置CXF的Servlet,将CXF的前端控制器注册到Web应用中。 5. **依赖库**:项目中可能包含的jar包,如CXF、...

    Spring MVC RESTFUL接口实例和android测试客户端

    2. **定义服务接口**:在接口中声明对应RESTful接口的方法,指定HTTP方法、URL和请求参数。Retrofit会自动生成网络调用的实现。 ```java public interface ApiService { @GET("/users") Call&lt;List&lt;User&gt;&gt; ...

    Spring源码分析.pdf

    在 Spring 中,IOC 容器的实现基于 BeanFactory 接口,该接口定义了 IOC 容器的基本行为,包括获取 Bean 实例、判断 Bean 是否单例、获取 Bean 的别名等。 BeanFactory 接口的实现有多种,Spring 提供了多种 IOC ...

    spring4 中文API

    - **The Resource interface**:介绍了Resource接口及其用途。 - **Built-in Resource implementations**:列举了Spring内置的资源实现。 - **The Resource Loader**:解释了Resource Loader的作用。 - **The ...

    cxf集成Spring的restful WebService接口

    本教程将深入探讨如何在Spring环境中集成CXF以实现RESTful WebService接口。 首先,我们需要理解REST(Representational State Transfer)的概念。REST是一种软件架构风格,用于设计网络应用程序。它的核心思想是...

    Spring中文帮助文档

    4.2. Resource接口 4.3. 内置 Resource 实现 4.3.1. UrlResource 4.3.2. ClassPathResource 4.3.3. FileSystemResource 4.3.4. ServletContextResource 4.3.5. InputStreamResource 4.3.6. ByteArrayResource...

    spring-resource-parse:Spring原始解析,包含各种实例,ioc,aop,mvc,tx-源码包

    "spring-resource-parse"项目为我们提供了一个深入研究Spring框架的绝佳平台,通过阅读源码,我们可以看到这些核心组件在实际代码中的实现细节,这对于提升我们的技术水平和解决实际问题的能力大有裨益。此外,开源...

    spring framewok 4参考文档

    Resource接口是Spring对底层资源的抽象,它使得开发者可以采用统一的方式来操作不同类型的资源。Spring提供了多种内置的Resource实现,比如针对文件系统、URLs、classpath等资源类型。ResourceLoader接口负责加载...

    spring中的资源访问宝典

    本文将详细介绍Spring如何通过`Resource`接口及其实现类来简化资源的访问。 首先,传统的资源访问方式通常依赖于`java.net.URL`和文件I/O操作,这种方式不仅代码复杂,而且效率较低。例如,在`URLTest`类中,我们...

    spring2.5中文文档

    4. **数据访问集成**:Spring 2.5增强了对JDBC、Hibernate、JPA等数据访问技术的支持,引入了新的模板类和回调接口,使得数据访问更加简单。 5. **Bean表达式语言(EL)**:Spring Expression Language (SpEL)是...

    Spring中使用classpath加载配置文件浅析

    在Spring中,可以通过ApplicationContext接口的实现类,比如ClassPathXmlApplicationContext,来加载位于classpath中的配置文件。例如,创建一个ApplicationContext对象的代码如下: ```java ApplicationContext ...

    Spring中集合类型的装配

    此外,Spring还提供了如`@Resource`注解、`@Value`注解等更多方式来完成集合类型的装配,使得我们可以根据具体需求选择最合适的方法。 总的来说,Spring中集合类型的装配是一个强大的特性,它增强了Spring容器的...

Global site tag (gtag.js) - Google Analytics