开涛spring3(4.3) - 资源 之 4.3 访问Resource
4.3.1 ResourceLoader接口
ResourceLoader接口用于返回Resource对象;其实现可以看作是一个生产Resource的工厂类。
- public interface ResourceLoader {
- Resource getResource(String location);
- ClassLoader getClassLoader();
- }
getResource接口用于根据提供的location参数返回相应的Resource对象;而getClassLoader则返回加载这些Resource的ClassLoader。
Spring提供了一个适用于所有环境的DefaultResourceLoader实现,可以返回ClassPathResource、 UrlResource;还提供一个用于web环境的ServletContextResourceLoader,它继承了 DefaultResourceLoader的所有功能,又额外提供了获取ServletContextResource的支持。
ResourceLoader在进行加载资源时需要使用前缀来指定需要加载:“classpath:path”表示返回 ClasspathResource,“http://path”和“file:path”表示返回UrlResource资源,如果不加前缀则需要根据 当前上下文来决定,DefaultResourceLoader默认实现可以加载classpath资源,如代码所示
- package lqy.springh4_3;
- import java.io.File;
- import java.io.IOException;
- import java.io.InputStream;
- import org.junit.Assert;
- import org.junit.Test;
- import org.springframework.core.io.ClassPathResource;
- import org.springframework.core.io.DefaultResourceLoader;
- import org.springframework.core.io.FileSystemResource;
- import org.springframework.core.io.Resource;
- import org.springframework.core.io.ResourceLoader;
- import org.springframework.core.io.UrlResource;
- public class ResourceTest {
- public static void main(String[] args) throws IOException {
- }
- @Test
- public void testResourceLoad1() {
- ResourceLoader loader = new DefaultResourceLoader();
- Resource resource = loader.getResource("classpath:lqy/springh4_3/test1.txt");
- //验证返回的是ClassPathResource
- Assert.assertEquals(ClassPathResource.class, resource.getClass());
- }
- @Test
- public void testResourceLoad2() {
- ResourceLoader loader = new DefaultResourceLoader();
- Resource resource2 = loader.getResource("file:lqy/springh4_3/test1.txt");
- //验证返回的是ClassPathResource
- Assert.assertEquals(UrlResource.class, resource2.getClass());
- }
- @Test
- public void testResourceLoad3() {
- ResourceLoader loader = new DefaultResourceLoader();
- Resource resource3 = loader.getResource("lqy/springh4_3/test1.txt");
- //验证返默认可以加载ClasspathResource
- Assert.assertTrue(resource3 instanceof ClassPathResource);
- }
- }
aaarticlea/png;base64,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" alt="" />
对于目前所有ApplicationContext都实现了ResourceLoader,因此可以使用其来加载资源。
ClassPathXmlApplicationContext:不指定前缀将返回默认的ClassPathResource资源,否则将根据前缀来加载资源;
FileSystemXmlApplicationContext:不指定前缀将返回FileSystemResource,否则将根据前缀来加载资源;
WebApplicationContext:不指定前缀将返回ServletContextResource,否则将根据前缀来加载资源;
其他:不指定前缀根据当前上下文返回Resource实现,否则将根据前缀来加载资源。
4.3.2 ResourceLoaderAware接口
ResourceLoaderAware是一个标记接口,用于通过ApplicationContext上下文注入ResourceLoader。
- public interface ResourceLoaderAware {
- void setResourceLoader(ResourceLoader resourceLoader);
- }
1) 首先准备测试Bean,我们的测试Bean还简单只需实现ResourceLoaderAware接口,然后通过回调将ResourceLoader保存下来就可以了:
- package lqy.springh4_3;
- import org.springframework.context.ResourceLoaderAware;
- import org.springframework.core.io.ResourceLoader;
- public class ResourceBean implements ResourceLoaderAware {
- private ResourceLoader resourceLoader;
- public void setResourceLoader(ResourceLoader resourceLoader) {
- this.resourceLoader = resourceLoader;
- }
- public ResourceLoader getResourceLoader() {
- return resourceLoader;
- }
- }
2) 配置Bean定义
- <bean class="lqy.springh4_3.ResourceBean"/>
3)测试
- package lqy.springh4_3;
- import java.io.IOException;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import org.springframework.core.io.ResourceLoader;
- public class ResourceTest {
- public static void main(String[] args) throws IOException {
- ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:lqy/springh4_3/springh4_3.xml");
- ResourceBean resourceBean = ctx.getBean(ResourceBean.class);
- ResourceLoader loader = resourceBean.getResourceLoader();
- System.out.print(loader instanceof ApplicationContext);
- }
- }
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFEAAAA3CAIAAAD7QDEmAAAC4klEQVRoge2ZP5rsIAjAPZcH4jw0++o9BfUWr9/v1dxgqtyALYyAiUmM8/fNypci4xjlJ0QwhK+vv9/f/z7+fFwul2mapmn6/Pycsui9JGEUQGFxwkJs9zEIkGCUECSAdAhGQV62ANlPCJJ+EUgI+YK5JaKpWijAEucHwzlmIiEUlkwVJERBsnGRhGBWGlE6pJWZJMR59RXvLswiMzNTtrazM7MwCrIgCJd/STaLU76VmbHEi8JlI2Q7WyNLDA9gZgEUxkzFQiwYDbKd2Tx27cbR3izIfdCZVB8nyo2J365eZv8uYWZmr4r3+deS88z/vwzmwTyY30cGcwszYyVUVhs1MNKqJV2wG8w0/BZjbkuKzPvxkaAjPrNEF/3nRI9sMsv4Um5o2Y8xnw3bNtEuTISDwbNuV/g2QSXLXS72jZj3PaK+vjWFgeQqZlVFbyBIRIHgEuYac6vH0tzz0MjzjA3MV9lZjazMEIx8k9kJRhuhksluzLXuma3X5EQYu/Lthbqqh2bdjc7sD0YHQts9l+eHFr84z7wAXujkbaI6VZmhwWklj9nUs3WzOMlsMak861ViFdV6OrMcYFC73ZqZ59lHTjKYB/P7yGAezG/FnKJp57fe+wpVgv9N5DpmPU7SKiFjIbY6BnTUbtyYJ5LTc9L1zYAol4iozL1261VN3/T9Orq8CtKH+1AM65PC/WGh6HaeOZWLfLXBcsOyXgXXMRMU1RmdxepV4J469Iju2s3d65L+fS7LNIvFWmb+/pBTPZa+bl1yvUdsMLcetlRety7ZzOw/wj2P+SZ1yXbm0r33bD7qkq+XkzxCBvNgHszvI4O5iZkxhoP60WvLYD5iZoyhkJhrRgFQ/0sLQqAr41fJDfGshbuNnQkUX1mrzK5RCPSZx8rNmFdGqzEv/eQ3MD/NtIX0xKq15hvMqVcyrvr28/e/rvhsLur2sBWJ9oqIUNvDnmXzkZMM5sH8PjKYfwfzDxmekTGdvRPCAAAAAElFTkSuQmCC" alt="" />
注意此处“loader instanceof ApplicationContext”,说明了ApplicationContext就是个ResoureLoader。
由于上述实现回调接口注入ResourceLoader的方式属于侵入式,所以不推荐上述方法,可以采用更好的自动注入方式,如“byType”和“constructor”,此处就不演示了。
4.3.3 注入Resource
通过回调或注入方式注入“ResourceLoader”,然后再通过“ResourceLoader”再来加载需要的资源对于只需要加载某个固定的资源是不是很麻烦,有没有更好的方法类似于前边实例中注入“java.io.File”类似方式呢?
Spring提供了一个PropertyEditor “ResourceEditor”用于在注入的字符串和Resource之间进行转换。因此可以使用注入方式注入Resource。
ResourceEditor完全使用ApplicationContext根据注入的路径字符串获取相应的Resource,说白了还是自己做还是容器帮你做的问题。
接下让我们看下示例:
1)准备Bean:
- package lqy.springh4_3;
- import org.springframework.core.io.Resource;
- public class ResourceBean3 {
- private Resource resource;
- public Resource getResource() {
- return resource;
- }
- public void setResource(Resource resource) {
- this.resource = resource;
- }
- }
2)准备配置文件
- <bean id="resourceBean1" class="lqy.springh4_3.ResourceBean3">
- <property name="resource" value="lqy/springh4_3/test1.properties"/>
- </bean>
- <bean id="resourceBean2" class="lqy.springh4_3.ResourceBean3">
- <property name="resource" value="classpath:lqy/springh4_3/test1.properties"/>
- </bean>
注意此处“resourceBean1”注入的路径没有前缀表示根据使用的ApplicationContext实现进行选择Resource实现。
3)让我们来看下测试代码
- package lqy.springh4_3;
- import java.io.IOException;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- public class ResourceTest {
- public static void main(String[] args) throws IOException {
- ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:lqy/springh4_3/springh4_3.xml");
- ResourceBean3 resourceBean1 = ctx.getBean("resourceBean1", ResourceBean3.class);
- ResourceBean3 resourceBean2 = ctx.getBean("resourceBean2", ResourceBean3.class);
- System.out.println(resourceBean1.getResource() instanceof ClassPathResource);
System.out.println(resourceBean2.getResource() instanceof ClassPathResource );- }
- }
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHIAAABOCAIAAABzB9X8AAADXElEQVR4nO2YwU7bMBjH/Vy58go8g9+A88Qb+LATB9QxdhiTxs23Sbts2uAwiQFS+0Fh0rgU1KSdOHD6dgh27CRFCfPH1Pb/U1RFrWvHv/zzJbEaTh+G04dD+nM4mh+OZh+Hs/c/J4Nv4yFdbmztTCaToiiKohgMBoXD7zNYgIJWCaBVBGgVAVpFWG+tZFgptuk7XgqtlpWqtoQW/kkrcbbwv6m0EmeamZktK10f3hJbzYaYmXXt1y4EfZJhlTH17yM9L6CVDNsyU9qFy0+eOFOsLZvMNQiwukNewlMVTEYrNsalOPTeLde62cyy0u441WMOan2WX/o2j5ubrOszkVat2MaDZaYSYezCtPbVanU0Bz9KeQDRCbAdcl1LnGWlWFs3kOtKtx6hdFrJsDbxBIgtVftPpLUTtiUXrbMNYxU2Lk9eLYMtamrVxu2XR67rg7VodQOl0GotW8MUpjVjY6vhw7Qaw71p1mtmbtNqdXCVdKGbVt95JLeptbo+EhWBUivZqp76tBIxGTbERjPFP/EzamtAy7Vpe97Z+2htfqnj7Ae3U2mtxNowGXfoxJbYZNVMEmuN68BTySXOVFQxaqW5Mhi3DEesxhK6ZZVaW0oYxeOFxWGVWYrXgeUDWkWAVhGgVQRoFQFaRUi2gmUyVX+7W2OgVYQEWslkKiIrXwWsVtr439y6kJcfnoigi9U4N4Jptdob9jpbtQZfstX+P8uMrNZG9Nq01tO+ElrPb+/Pb+8/nN0dnN0dnN4enE7e/fi9+2X0clpXJKAR6uRmdnJT7B//ent0vXd0/eb71e5X2vl81vcBqylngdayVRlRXwRWpKR61DQvpnlBl1duG9PFeHQx/nR0urm91+O5tbqWg1tWQ5ZvlRmj225Zq5FctbG107ptbu+9er2P14HnofI8z/O8KIry0zObzebzObQ+D2gVAVpFgFYRoFUEaBUhlVasYEVAqwgJtGJhsIlgWtd6YVBU6/ouDP5/rSsS0IhkD1hYGAxJ99yKhcEAvA6IAK0iQKsI0CoCtIoArSJAqwjQKgK0igCtIkCrCNAqArSKAK0iQKsI0CoCtIoArSJAqwjQKgK0igCtIkCrCNAqArSKAK0iQKsI0CoCtIoArSJAqwjQKgK0igCtIvwF7NX/e1saanQAAAAASUVORK5CYII=" alt="" />
接下来一节让我们深入ApplicationContext对各种Resource的支持,及如何使用更便利的资源加载方式。
开涛spring3(4.3) - 资源 之 4.3 访问Resource的更多相关文章
- 开涛spring3(4.2) - 资源 之 4.2 内置Resource实现
4.2 内置Resource实现 4.2.1 ByteArrayResource ByteArrayResource代表byte[]数组资源,对于“getInputStream”操作将返回一个By ...
- 开涛spring3(4.1) - 资源 之 4.1 基础知识
4.1.1 概述 在日常程序开发中,处理外部资源是很繁琐的事情,我们可能需要处理URL资源.File资源资源.ClassPath相关资源.服务器相关资源 (JBoss AS 5.x上的VFS资源)等 ...
- 开涛spring3(4.4) - 资源 之 4.4 Resource通配符路径
4.4.1 使用路径通配符加载Resource 前面介绍的资源路径都是非常简单的一个路径匹配一个资源,Spring还提供了一种更强大的Ant模式通配符匹配,从能一个路径匹配一批资源. Ant路径通配 ...
- 开涛spring3(1) - Spring概述
1.1.1 Spring是什么 Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发.应用程序是由 ...
- 开涛spring3(12.2) - 零配置 之 12.2 注解实现Bean依赖注入
12.2 注解实现Bean依赖注入 12.2.1 概述 注解实现Bean配置主要用来进行如依赖注入.生命周期回调方法定义等,不能消除XML文件中的Bean元数据定义,且基于XML配置中的依赖注入的 ...
- 开涛spring3(9.2) - Spring的事务 之 9.2 数据库事务概述
9.2.1 概述 Spring框架支持事务管理的核心是事务管理器抽象,对于不同的数据访问框架(如Hibernate)通过实现策略接口 PlatformTransactionManager,从而能支持 ...
- 开涛spring3(3.3) - DI 之 3.3 更多DI的知识
3.3.1 延迟初始化Bean 延迟初始化也叫做惰性初始化,指不提前初始化Bean,而是只有在真正使用时才创建及初始化Bean. 配置方式很简单只需在<bean>标签上指定 “lazy- ...
- 开涛spring3(3.1) - DI的配置使用
3.1.1 依赖和依赖注入 传统应用程序设计中所说的依赖一般指“类之间的关系”,那先让我们复习一下类之间的关系: 泛化:表示类与类之间的继承关系.接口与接口之间的继承关系: 实现:表示类对接口的实现 ...
- 开涛spring3(12.3) - 零配置 之 12.3 注解实现Bean定义
12.3 注解实现Bean定义 12.3.1 概述 前边介绍的Bean定义全是基于XML方式定义配置元数据,且在[12.2注解实现Bean依赖注入]一节中介绍了通过注解来减少配置数量,但并没有完全 ...
随机推荐
- druid查询
查询是发送HTTP请求到,Broker, Historical或者Realtime节点.查询的JSON表达和每种节点类型公开相同的查询接口. Queries are made using an HTT ...
- webapp 1px显示两倍的问题
公司最近换新首页,按照设计师的要求<大家都在逛>的分割线要1个像素. .span-3{ width:33.3333%; &:not(:first-child){ &:bef ...
- JavaEE开发之SpringMVC中的自定义拦截器及异常处理
上篇博客我们聊了<JavaEE开发之SpringMVC中的路由配置及参数传递详解>,本篇博客我们就聊一下自定义拦截器的实现.以及使用ModelAndView对象将Controller的值加 ...
- XtraBackup 原理与安装
简介 XtraBackup(PXB) 工具是 Percona 公司用 perl 语言开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle).Percona Server ...
- callLater
UIComponent的方法,该方法在每次更新屏幕之前,Flash Player 或 AIR 都会调用为更新预定的函数集.有时,应在下次更新时调用函数,以执行为当前更新预定的其余代码.部分功能(如效果 ...
- 单Js 的重力游戏开发
最近在用看cocos的时候萌生的想法,单纯js实现重力原理.然后就做了一个这样的小游戏.姑且命名为<超级玛丽>! 因为之前有人要我做超级玛丽.哈哈哈哈哈哈!这也算完成任务了吧. 先说一下原 ...
- mysql查询今天、昨天、7天、近30天、本月、上一月 数据
今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ...
- lighttpd启动问题
/home/yuna/web/app/lighttpd/sbin/lighttpd -f /home/yuna/web/app/lighttpd/lighttpd.conf -m /home/yuna ...
- Linux系统优化
前言:这篇博客主机讲下安装Linux系统后调优及安全设置 基础环境 一.使用网易163镜像做yum源 默认国外的yum源速度很慢,所以换成国内的. 先备份 下载163yum源:http://mirro ...
- #include<> 和#include“”的区别
1.< >引用的是编译器的类库路径里面的头文件2." "引用的是程序目录的相对路径中的头文件,在程序目录的相对路径中找不到该头文件时会继续在类库路径里搜寻该头文件 ...