spring基础学习之IoC-资源访问(五)
来源:互联网 发布:java实现支付功能 编辑:程序博客网 时间:2024/04/27 15:04
上篇博客简单的回顾了一下Java的反射机制知识,本篇博客讲解一下spring的Resource接口.
因为JDK所提供的访问资源的类(如File,java.net.URL等),并不能很好的满足各种底层资源的访问需求,
于是spring设计了一个Resource接口,它提供了更强的访问底层资源的能力.该接口对应不同资源类型的实现类,
Resource接口的主要方法有:
boolean exists():资源是否存在.
boolean isOpen():资源是否打开.
URL getURL() throws IOException:如果底层资源可以表示成URL,该方法返回对应的URL对象.
File getFile() throws IOException:如果底层资源对应一个文件,该方法返回对应的File对象.
InputStream () throws IOException:返回资源对应的输入流.
Resource在spring框架中起着不可或缺的作用,Spring框架使用Resource装载各种资源,这些资源包括配置文件资源,
国际化属性文件资源等.下面简单了解一下Resource的具体实现类,Resource是一个接口,AbstractResource是一个抽象类,
实现了Resource接口,AbstractResource下有很多子类,分别是:
ByteArrayResource:二进制数组表示的资源.
ClassPathResource:类路径下的资源.
FileSystemResource:文件系统资源.
InputStreamResource:对应一个流资源.
ServletContextResource:访问web容器上下文的资源.
UrlResource:封装了java.net.URL,它使用户能够访问任何可以通过URL表示的资源,如文件的系统资源,HTTP资源和FTP资源等.
总之,有了如上的这些资源,我们就可以将spring的配置信息放在任何地方了.
ResourceLoader仅有一个getResource(String location)方法,可以根据一个资源地址加载资源,ResourcePatternResolver扩展ResourceLoader
关于spring的资源访问方面的知识先简单讲这些,请继续关注以后的博客.....
因为JDK所提供的访问资源的类(如File,java.net.URL等),并不能很好的满足各种底层资源的访问需求,
于是spring设计了一个Resource接口,它提供了更强的访问底层资源的能力.该接口对应不同资源类型的实现类,
Resource接口的主要方法有:
boolean exists():资源是否存在.
boolean isOpen():资源是否打开.
URL getURL() throws IOException:如果底层资源可以表示成URL,该方法返回对应的URL对象.
File getFile() throws IOException:如果底层资源对应一个文件,该方法返回对应的File对象.
InputStream () throws IOException:返回资源对应的输入流.
Resource在spring框架中起着不可或缺的作用,Spring框架使用Resource装载各种资源,这些资源包括配置文件资源,
国际化属性文件资源等.下面简单了解一下Resource的具体实现类,Resource是一个接口,AbstractResource是一个抽象类,
实现了Resource接口,AbstractResource下有很多子类,分别是:
ByteArrayResource:二进制数组表示的资源.
ClassPathResource:类路径下的资源.
FileSystemResource:文件系统资源.
InputStreamResource:对应一个流资源.
ServletContextResource:访问web容器上下文的资源.
UrlResource:封装了java.net.URL,它使用户能够访问任何可以通过URL表示的资源,如文件的系统资源,HTTP资源和FTP资源等.
总之,有了如上的这些资源,我们就可以将spring的配置信息放在任何地方了.
下面以FileSystemResource,ClassPathResource和ServletContextResource为例,简单了解一下Resoruce的强大,直接看代码.
package com.ilucky.spring.resource;import java.io.IOException;import java.util.Date;import org.springframework.core.io.FileSystemResource;import org.springframework.core.io.Resource;/** * @author IluckySi * @date 20140425 */public class FileSystemResourceTest {public static void main(String[] args) throws IOException {String filePath = "D:/abc.txt";Resource resource = new FileSystemResource(filePath);if(resource.exists()) {System.out.println("资源是否存在:"+resource.exists());System.out.println("资源是否打开:"+resource.isOpen());System.out.println("资源名称:"+resource.getFilename());System.out.println("资源最近修改时间:"+new Date(resource.lastModified()));System.out.println("资源URL:"+resource.getURL().toString());System.out.println("资源URI:"+resource.getURI().toString());System.out.println("资源描述:"+resource.getDescription());System.out.println("资源文件:"+resource.getFile());System.out.println("资源文件大小:"+resource.getFile().length());System.out.println("资源流:"+resource.getInputStream());//如上只列出了一些常用的方法.} else {System.out.println("资源是否存在:"+resource.exists());}}}/**运行结果:资源是否存在:true资源是否打开:false资源名称:abc.txt资源最近修改时间:Fri Apr 25 16:51:13 CST 2014资源URL:file:/D:/abc.txt资源URI:file:/D:/abc.txt资源描述:file [D:\abc.txt]资源文件:D:\abc.txt资源文件大小:49资源流:java.io.FileInputStream@f84386*/
package com.ilucky.spring.resource;import java.io.IOException;import java.util.Date;import org.springframework.core.io.ClassPathResource;import org.springframework.core.io.Resource;/** * @author IluckySi * @date 20140425 */public class ClassPathResourceTest {public static void main(String[] args) throws IOException {Resource resource = new ClassPathResource("abc.txt");if(resource.exists()) {System.out.println("资源是否存在:"+resource.exists());System.out.println("资源是否打开:"+resource.isOpen());System.out.println("资源名称:"+resource.getFilename());System.out.println("资源最近修改时间:"+new Date(resource.lastModified()));System.out.println("资源URL:"+resource.getURL().toString());System.out.println("资源URI:"+resource.getURI().toString());System.out.println("资源描述:"+resource.getDescription());System.out.println("资源文件:"+resource.getFile());System.out.println("资源文件大小:"+resource.getFile().length());System.out.println("资源流:"+resource.getInputStream());//如上只列出了一些常用的方法.} else {System.out.println("资源是否存在:"+resource.exists());}}}/**运行结果:资源是否存在:true资源是否打开:false资源名称:abc.txt资源最近修改时间:Fri Apr 25 17:11:05 CST 2014资源URL:file:/D:/myproject/spring-resource/WebRoot/WEB-INF/classes/abc.txt资源URI:file:/D:/myproject/spring-resource/WebRoot/WEB-INF/classes/abc.txt资源描述:class path resource [abc.txt]资源文件:D:\myproject\spring-resource\WebRoot\WEB-INF\classes\abc.txt资源文件大小:71资源流:java.io.BufferedInputStream@30e280*/
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><jsp:directive.page import="org.springframework.web.context.support.ServletContextResource"/><jsp:directive.page import="org.springframework.core.io.Resource"/><jsp:directive.page import="org.springframework.web.util.WebUtils"/><%Resource resource = new ServletContextResource(application, "WEB-INF/abc.txt");if(resource.exists()) {out.println("资源是否存在:"+resource.exists() + "<br/>");out.println("资源是否打开:"+resource.isOpen()+ "<br/>");out.println("资源名称:"+resource.getFilename()+ "<br/>");out.println("资源最近修改时间:"+new Date(resource.lastModified())+ "<br/>");out.println("资源URL:"+resource.getURL().toString()+ "<br/>");out.println("资源URI:"+resource.getURI().toString()+ "<br/>");out.println("资源描述:"+resource.getDescription()+ "<br/>");out.println("资源文件:"+resource.getFile()+ "<br/>");out.println("资源文件大小:"+resource.getFile().length()+ "<br/>");out.println("资源流:"+resource.getInputStream()+ "<br/>"); out.println("资源路径:" + WebUtils.getTempDir(application).getAbsolutePath()+ "<br/>");} else { out.println("资源是否存在:"+resource.exists());}%><!-- 资源是否存在:true资源是否打开:false资源名称:abc.txt资源最近修改时间:Fri Apr 25 17:30:34 CST 2014资源URL:jndi:/localhost/spring-resource/WEB-INF/abc.txt资源URI:jndi:/localhost/spring-resource/WEB-INF/abc.txt资源描述:ServletContext resource [/WEB-INF/abc.txt]资源文件:D:\tomcat6\apache-tomcat-7.0.42\webapps\spring-resource\WEB-INF\abc.txt资源文件大小:71资源流:java.io.ByteArrayInputStream@2b6e48资源路径:D:\tomcat6\apache-tomcat-7.0.42\work\Catalina\localhost\spring-resource -->
另外注意:系统加载资源时默认采用系统编码读取资源内容,如果资源文件采用特殊的编码格式,那么可以通过EncodedResource对资源进行编码,以保证资源内容的正确性.直接看代码.
package com.ilucky.spring.resource;import java.io.IOException;import org.springframework.core.io.ClassPathResource;import org.springframework.core.io.Resource;import org.springframework.core.io.support.EncodedResource;import org.springframework.util.FileCopyUtils;/** * @author IluckySi * @date 20140425 */public class EncodedResourceTest {public static void main(String[] args) throws IOException {Resource resource = new ClassPathResource("abc.txt");EncodedResource encRes = new EncodedResource(resource, "UTF-8");if(resource.exists()) {System.out.println("资源是否存在:"+resource.exists());String content = FileCopyUtils.copyToString(encRes.getReader());System.out.println("资源内容:" + content);} else {System.out.println("资源是否存在:"+resource.exists());}}}/**运行结果:资源是否存在:true资源内容:ssssssssssssssssssssshello 司冬雪!!!@#$%ssssssssssssssssssssss*/
spring基于上面的资源访问类,又定义了一套资源加载的接口ResourceLoader<--ResourcePatternResolver<--PathMatchingResourcePatternResolver,ResourceLoader仅有一个getResource(String location)方法,可以根据一个资源地址加载资源,ResourcePatternResolver扩展ResourceLoader
接口,定义了一个新的接口方法getResources(String location),该方法支持带资源类型前缀及Ant风格的资源路径表达式.直接看代码.
package com.ilucky.spring.resource;import java.io.IOException;import org.springframework.core.io.Resource;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.core.io.support.ResourcePatternResolver;/** * @author IluckySi * @date 20140425 */public class ResourcePatternResolverTest {public static void main(String[] args) throws IOException {ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();Resource resources[] = resolver.getResources("classpath*:com/**/*.xml");for(Resource resource : resources) {System.out.println(resource.getFilename());}}}/**运行结果:jsf-ri-runtime.xmlstandard-html-renderkit.xmlrss-example.xmlcom.xmlilucky.xmlresource.xmlspring.xml*/
在上面的代码中我们看到资源路径是"classpath*,所以PathMatchingResourcePatternResolver将扫描所有类路径下及JAR包中对应com类包下的路径,查询所有以xml为后缀的文件.
如下是此项目实例的结构:
关于spring的资源访问方面的知识先简单讲这些,请继续关注以后的博客.....
0 0
- spring基础学习之IoC-资源访问(五)
- spring学习之---资源访问
- Spring基础之IoC
- Spring学习笔记<五> IOC之依赖注入
- Spring 学习之 IOC
- spring学习之Ioc
- Spring学习之IOC
- Spring之IOC学习
- Spring学习之IOC
- 【Spring学习】之 IOC
- Spring学习之IOC
- Spring3 学习笔记之(spring core 之IoC基础)
- Spring之资源访问
- spring基础学习之Ioc-反射简单介绍(四)
- Spring学习笔记之基础、IOC、DI(1)
- Spring框架学习【IoC定位Bean资源】
- Spring 之 IoC 学习笔记
- spring框架学习之---ioc
- 初识hash
- 一个可直接用的赫夫曼源代码
- Linux网络编程:gethostbyname()的应用
- 全国213个5A景区(截至2016年01月01日)
- Windws OS 一些概念
- spring基础学习之IoC-资源访问(五)
- Linux网络编程:TCP服务器(多进程)
- Codeforces Round #242 (Div. 2) (A、B、C)
- Timus 1723. Sandro's Book 题解
- Spring AOP(二、注解配置实现)
- 线程、进程 的创建
- XML DOM attributes 属性
- Windows编程之非模态对话框
- archlinux 音乐播放器与歌词显示