您的位置:首页 > 编程语言 > Java开发

Spring 资源访问

2016-07-05 16:46 357 查看
Spring为资源访问提供了一个Resource接口,该接口提供了比URL更强的资源访问能力。

Resource接口主要提供了一下几个方法。

getInputStream();定位并打开资源,返回资源对应的输入流。每次调用都返回新的输入流,调用者必须负责关闭输入流。

exists();返回Resource所指向的资源是否存在。

isOpen();返回资源文件是否打开,如果资源文件不能多次读取,每次读取结束时应该显示关闭,以防止资源泄露。

getDescription();返回资源的描述信息,用于资源处理出错时输出该信息,通常是全限定文件名或实际URL。

getFile:返回资源对应的File对象。

getURL:返回资源对应的URL对象。

Spring提供了大量的Resource实现类:

URLResource:访问网络资源的实现类。

ClassPathResource:访问类加载路径里资源的实现类。

FileSystemResource:访问文件系统里资源的实现类。

ServletContextResource:访问相对于ServlerContext路径里的资源的实现类。

InputStreamResource:访问输入流资源的实现类。

ByteArrayResource:访问字节数组资源的实现类。

Spring提供了如下两个标志性接口:

ReourceLoader:该接口实现类的实例可以获得一个Resource实例。

ResourceLoaderAware:该接口实现类的实例将获得一个ResourceLoader的引用。

在ResourceLoader接口里有如下方法:

Resource getResource(String

location):该接口仅包含这个方法,该方法用于返回一个Resource实例。ApplicationContext的实现类都实现ResourceLoader接口,因此ApplicationContext可用于直接获取Resource实例。

//ClassPathXmlApplicationContext是从类资源文件下(src)下寻找文件
//      ApplicationContext ctx = new
//          ClassPathXmlApplicationContext("bean.xml");
//创建ApplicationContext实例
//使用FileSystemXmlApplicationContext会从项目下找文件
ApplicationContext ctx = new
FileSystemXmlApplicationContext("bean.xml");
Resource res = ctx.getResource("book.xml");
//获取该资源的简单信息
System.out.println(res.getFilename());
System.out.println(res.getDescription());
//创建Dom4j的解析器
SAXReader reader = new SAXReader();
Document doc = reader.read(res.getFile());
//获取根元素
Element el = doc.getRootElement();
List l = el.elements();
//遍历根元素的全部子元素
for (Iterator it = l.iterator();it.hasNext() ; ){
//每个节点都是<书>节点
Element book = (Element)it.next();
List ll = book.elements();
//遍历<书>节点的全部子节点
for (Iterator it2 = ll.iterator();it2.hasNext() ; )
{
Element eee = (Element)it2.next();
System.out.println(eee.getText());
}
}


//通过标准classpath:前缀,强制使用classPathResource
Resource res = ctx.getResource("classpath:book.xml");
//通过标准file:前缀,强制使用UrlResource访问本地资源
Resource res = ctx.getResource("file:book.xml");
//通过标准http:前缀,强制使用UrlResource访问基于http协议的网络资源
Resource res = ctx.getResource("http://localhost:8080/bean.xml");


以下是常见的前缀及对应的访问策略:

classpath:以classpathresource实例来访问类加载路径下的资源。

file:以urlresource实例访问本地文件 系统的资源。

http:以URLResource实例访问基于HTTP协议的网络资源。

无前缀:由ApplicationContext的实现类决定访问策略。

使用Resource作为属性:

如果Bean实例访问资源,有以下两种策略:

代码中获取Resource实例。

使用依赖注入。

<?xml version="1.0" encoding="GBK"?>
<!-- Spring配置文件的根元素,使用spring-beans-3.0.xsd语义约束 -->
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd"> 
<bean id="test" class="com.bh.service.TestBean">
<!-- 注入资源 -->
<property name="resource"
value="classpath:book.xml"/>
</bean>
</beans>


在ApplicationContext中使用资源:

ApplicationContext确定资源访问策略通常有两个方法:

ApplicationContext实现类指定访问策略。

前缀指定访问策略。

ApplicationContext实现类指定访问策略:

当我们创建ApplicationContext对象时,通常可以使用如下三个实现类。

ClassPathXMLApplicationContext:对应使用ClassPathResource进行资源访问。

FileSystenXmlApplicationContext:对应使用FileSystemResource进行资源访问。

XmlWebApplicationContext:对应使用ServletContextResource进行资源访问。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring url resource