- 浏览: 63964 次
- 性别:
- 来自: 应县
-
最新评论
-
fc19861011:
请问你解决了吗?poi修改word中生成的图表数据找了好久没发 ...
jacob 怎么改变 word图表的数据呢? -
longgol:
GridPanel中mouseover事件获取列index
...
GridPanel中mouseover事件获取行index
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接口的定义:
public interface Resource extends InputStreamSource ...{
boolean exists();
boolean isOpen();
URL getURL() throws IOException;
File getFile() throws IOException;
Resource createRelative(String relativePath) throws IOException; //根据相对路径创建资源
String getFilename();
String getDescription();
}
它提供我们访问资源最基本的接口。我们实际访问的时候直接用Resource接口就可以,不比使用其子类。在初始化时,其子类的实现各有不同。
首先看最常用的ClassPathResource :
public InputStream getInputStream() throws IOException ...{
InputStream is = null;
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;
}
这个是ClassPathResource 获得InputStream的代码,可以看出,它是通过Class或者ClassLoader的getResourceAsStream()方法来获得InputStream的。关于这两个类的方法的区别我另外的一篇文章已经解释。其path一般都是以“classpath:”开头,如果以“classpath*:”开头表示所有与给定名称匹配的classpath资源都应该被获取。
其次来看FileSystemResource:
public FileSystemResource(String path) ...{
Assert.notNull(path, "Path must not be null");
this.file = new File(path);
this.path = StringUtils.cleanPath(path);
}
public InputStream getInputStream() throws IOException ...{
return new FileInputStream(this.file);
}
就是根据给定的Path来构造File,然后再构造FileInputStream。这儿的path一般要给出绝对路径,当然也可以是相对路径,但是如果使用相对路径要注意其根目录。例如在eclipse中,它的根目录就是你工程目录作为你的根目录。
再来看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"。
最后来看UrlResource:
public UrlResource(String path) throws MalformedURLException ...{
Assert.notNull(path, "Path must not be null");
this.url = new URL(path);
this.cleanedUrl = getCleanedUrl(this.url, path);
}
public InputStream getInputStream() throws IOException ...{
URLConnection con = this.url.openConnection();
con.setUseCaches(false);
return con.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
ClassPathResource:通过 ClassPathResource 以类路径的方式进行访问;
FileSystemResource:通过 FileSystemResource 以文件系统绝对路径的方式进行访问;
ServletContextResource:通过 ServletContextResource 以相对于Web应用根目录的方式进行访问。
UrlResource :通过java.net.URL来访问资源,当然它也支持File格式,如“file:”
先看一下Resource接口的定义:
public interface Resource extends InputStreamSource ...{
boolean exists();
boolean isOpen();
URL getURL() throws IOException;
File getFile() throws IOException;
Resource createRelative(String relativePath) throws IOException; //根据相对路径创建资源
String getFilename();
String getDescription();
}
它提供我们访问资源最基本的接口。我们实际访问的时候直接用Resource接口就可以,不比使用其子类。在初始化时,其子类的实现各有不同。
首先看最常用的ClassPathResource :
public InputStream getInputStream() throws IOException ...{
InputStream is = null;
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;
}
这个是ClassPathResource 获得InputStream的代码,可以看出,它是通过Class或者ClassLoader的getResourceAsStream()方法来获得InputStream的。关于这两个类的方法的区别我另外的一篇文章已经解释。其path一般都是以“classpath:”开头,如果以“classpath*:”开头表示所有与给定名称匹配的classpath资源都应该被获取。
其次来看FileSystemResource:
public FileSystemResource(String path) ...{
Assert.notNull(path, "Path must not be null");
this.file = new File(path);
this.path = StringUtils.cleanPath(path);
}
public InputStream getInputStream() throws IOException ...{
return new FileInputStream(this.file);
}
就是根据给定的Path来构造File,然后再构造FileInputStream。这儿的path一般要给出绝对路径,当然也可以是相对路径,但是如果使用相对路径要注意其根目录。例如在eclipse中,它的根目录就是你工程目录作为你的根目录。
再来看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"。
最后来看UrlResource:
public UrlResource(String path) throws MalformedURLException ...{
Assert.notNull(path, "Path must not be null");
this.url = new URL(path);
this.cleanedUrl = getCleanedUrl(this.url, path);
}
public InputStream getInputStream() throws IOException ...{
URLConnection con = this.url.openConnection();
con.setUseCaches(false);
return con.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
发表评论
-
Tomcat集群与负载均衡
2011-01-26 16:00 628在单一的服务器上执行W ... -
xalan-2.7.0.jar下载地址
2011-01-26 15:59 3243xalan-2.7.0.jar下载地址:http://svn. ... -
provider org.apache.xalan.processor.TransformerFactoryImpl not found
2011-01-26 15:58 1008完整的Exception: Exception startin ... -
Apache与Tomcat整合的简单方法
2011-01-26 15:57 7121、准备,下载需要的文件。这里假定你已经正确安装配置好了JDK ... -
(转)Tomcat源码学习(一)
2011-01-26 15:57 633Tomcat源码学习(一) http://carllgc.bl ... -
Tomat源码学习(二) [图片]
2011-01-26 15:55 765Tomat源码学习(二) Tomat6的整体架构 在上篇文 ... -
Tomat6架构探讨(续)
2011-01-26 15:54 753Tomat源码学习(二) 下面,我们重点针对Catalin ... -
JNDI
2011-01-26 15:49 758Java术语 英文全称是:Java ... -
JSP内建对象- - 转
2011-01-26 15:48 605① out - javax.servlet.jsp.jspWr ... -
全面理解String(JAVA复习)- -
2011-01-26 15:48 6251. 首先String不属 ... -
初学者如何开发出高质量的J2EE系统 (转载)
2011-01-26 15:47 741J2EE学习者越来越多,J2E ... -
关于JSP中的taglib uri
2011-01-26 15:47 1042自定义标签在jsp中应用是需要声明标签库,有下面两种方式: 1 ... -
context-param和init-param区别
2011-01-26 15:46 496web.xml里面可以定义两种参数: (1)applicati ... -
javax.servlet.Filter运用
2011-01-26 15:46 731Servlets Filter 是Servlet 2.3 规范 ... -
javax.servlet.FilterChain
2011-01-26 15:45 1015javax.servlet Interface Filter ... -
引用 五个有用的过滤器 Filter
2011-01-26 15:45 659引用 xyz 的 五个有用的过滤器 Filter 来源:htt ... -
spring:简单的属性参考
2011-01-26 15:43 592在定义文件(XML配置文件)中定义Bean时,可以直接指定一个 ... -
spring:Inversion of Control具体实现【资料搜集】
2011-01-26 15:42 650IoC(Inversion of Control)控制反转的具 ... -
学习Spring前必须了解的几点【资料搜集】
2011-01-26 15:42 914轻量级(Lightweight) 轻量级的形容是相对于 ... -
struts2:主题: Interceptor在Struts2中的应用... [图片]
2011-01-26 15:41 731Interceptor(拦截器)将Action共用的行为独立出 ...
相关推荐
在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、...
在 Spring 中,IOC 容器的实现基于 BeanFactory 接口,该接口定义了 IOC 容器的基本行为,包括获取 Bean 实例、判断 Bean 是否单例、获取 Bean 的别名等。 BeanFactory 接口的实现有多种,Spring 提供了多种 IOC ...
2. **定义服务接口**:在接口中声明对应RESTful接口的方法,指定HTTP方法、URL和请求参数。Retrofit会自动生成网络调用的实现。 ```java public interface ApiService { @GET("/users") Call<List<User>> ...
- **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容器的...