<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 。常用的有以下四种:
- ClassPathResource:通过 ClassPathResource 以类路径的方式进行访问;
- FileSystemResource:通过 FileSystemResource 以文件系统绝对路径的方式进行访问;
- ServletContextResource:通过 ServletContextResource 以相对于Web应用根目录的方式进行访问。
- 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 进行判断。
|
|
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1818714
分享到:
相关推荐
在Spring框架中,`@Autowired`和`@Resource`注解是两个常见的依赖注入(DI, Dependency Injection)工具,它们都是用来解决组件之间的耦合问题,使得代码更加灵活和可测试。然而,这两个注解在具体使用时有一些关键性...
在本场景中,我们关注的是如何利用Spring的`Resource`接口来读取配置文件。这在Java应用程序,尤其是Spring应用中是常见的需求,因为配置文件通常用于设置应用的环境变量、数据库连接信息等。 `Resource`接口是...
Spring的Resource接口是访问资源的抽象,它提供了一种统一的资源访问方式,可以处理不同来源的资源,包括本地文件系统、类路径、URL等。Resource对象并不直接包含资源内容,而是提供了打开输入流、获取资源路径等...
Spring的ClassPathResource则提供了一个接口,用于处理这些类路径下的资源。 创建和使用ClassPathResource通常涉及以下步骤: 1. **创建实例**: 创建ClassPathResource实例时,你需要提供一个字符串参数,这个...
Spring 框架中,@Resource 注解是一种常用的依赖注入方式,用于将对象注入到应用程序中。但是,在实际开发中,经常会遇到 @Resource 注解的对象为 null 的问题。本文将详细介绍 Spring 中 @Resource 注解解决 null ...
Spring MVC中的Resource接口不仅提供了`getInputStream()`方法,还封装了许多其他功能,使得操作各种类型的资源变得更加方便。Resource接口的实现类如UrlResource、FileUrlResource、FileSystemResource等,分别对应...
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来...
资源管理章节涵盖了资源的获取和抽象,包括Resource接口的介绍、内置的Resource实现、资源加载器以及如何在应用上下文中使用资源路径。 验证、数据绑定和类型转换部分讲解了如何使用Spring的验证器接口进行验证,...
3. **服务实现**:实现了服务接口中的方法,处理具体的业务逻辑。 4. **部署描述符**:如web.xml,用于配置CXF的Servlet,将CXF的前端控制器注册到Web应用中。 5. **依赖库**:项目中可能包含的jar包,如CXF、...
2. **定义服务接口**:在接口中声明对应RESTful接口的方法,指定HTTP方法、URL和请求参数。Retrofit会自动生成网络调用的实现。 ```java public interface ApiService { @GET("/users") Call<List<User>> ...
在 Spring 中,IOC 容器的实现基于 BeanFactory 接口,该接口定义了 IOC 容器的基本行为,包括获取 Bean 实例、判断 Bean 是否单例、获取 Bean 的别名等。 BeanFactory 接口的实现有多种,Spring 提供了多种 IOC ...
- **The Resource interface**:介绍了Resource接口及其用途。 - **Built-in Resource implementations**:列举了Spring内置的资源实现。 - **The Resource Loader**:解释了Resource Loader的作用。 - **The ...
本教程将深入探讨如何在Spring环境中集成CXF以实现RESTful WebService接口。 首先,我们需要理解REST(Representational State Transfer)的概念。REST是一种软件架构风格,用于设计网络应用程序。它的核心思想是...
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框架的绝佳平台,通过阅读源码,我们可以看到这些核心组件在实际代码中的实现细节,这对于提升我们的技术水平和解决实际问题的能力大有裨益。此外,开源...
Resource接口是Spring对底层资源的抽象,它使得开发者可以采用统一的方式来操作不同类型的资源。Spring提供了多种内置的Resource实现,比如针对文件系统、URLs、classpath等资源类型。ResourceLoader接口负责加载...
本文将详细介绍Spring如何通过`Resource`接口及其实现类来简化资源的访问。 首先,传统的资源访问方式通常依赖于`java.net.URL`和文件I/O操作,这种方式不仅代码复杂,而且效率较低。例如,在`URLTest`类中,我们...
4. **数据访问集成**:Spring 2.5增强了对JDBC、Hibernate、JPA等数据访问技术的支持,引入了新的模板类和回调接口,使得数据访问更加简单。 5. **Bean表达式语言(EL)**:Spring Expression Language (SpEL)是...
在Spring中,可以通过ApplicationContext接口的实现类,比如ClassPathXmlApplicationContext,来加载位于classpath中的配置文件。例如,创建一个ApplicationContext对象的代码如下: ```java ApplicationContext ...
此外,Spring还提供了如`@Resource`注解、`@Value`注解等更多方式来完成集合类型的装配,使得我们可以根据具体需求选择最合适的方法。 总的来说,Spring中集合类型的装配是一个强大的特性,它增强了Spring容器的...