© 版权声明:本文为博主原创文章,转载请注明出处

Resources

针对于资源文件的统一接口

-UrlResource:URL对应的资源,根据一个URL地址即可创建

-ClassPathResource:获取类路径下的资源文件

-FileSystemResource:获取文件系统里面的资源

-ServletContextResource:ServletContext封装的资源,用于访问ServletContext环境下的资源(需导入spring-web.jar,需在web环境中测试,本次不测试。)

-InputStreamResource:针对于输入流封装的资源

-ByteArrayResource:针对于字节数组封装的资源

ResourceLoader

spring的IOC容器中,所有的Application context都实现了ResourceLoader这个接口,所有的application context都可以用getResource()方法来获取Resource实例。

前缀:

classpath:从类路径中加载

file:从文件系统中作为url加载

http:作为url加载

(none):依赖于application context,也就是说application context是怎么加载的,它就是怎么加载的

实例

1.项目结构

2.pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.springresources</groupId>
<artifactId>Spring-Resources</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>Spring-Resources Maven Webapp</name>
<url>http://maven.apache.org</url> <!-- 统一开发所需版本 -->
<properties>
<spring.version>4.3.7.RELEASE</spring.version>
</properties> <dependencies>
<!-- junit依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- Spring核心依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies> <build>
<finalName>Spring-Resources</finalName>
</build>
</project>

3.test-resources.txt

测试spring Resource

4.SpringResource.java

package org.spring.resources;

import java.io.IOException;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.io.Resource; public class SpringResource implements ApplicationContextAware { private ApplicationContext context; public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.context = applicationContext; } /**
* 通过classpath前缀获取Resource
*
* @throws IOException
*/
public void getClassPathResouce() throws IOException { Resource resource = context.getResource("classpath:test-resources.txt");
System.out.println("ResourceLoader(classpath) filename: " + resource.getFilename());
System.out.println("ResourceLoader(classpath) size: " + resource.contentLength()); } /**
* 通过file前缀获取Resource
*
* @throws IOException
*/
public void getFileResouce() throws IOException { Resource resource = context.getResource("file:E:\\code\\Spring-Resources\\src\\main\\resources\\test-resources.txt");
System.out.println("ResourceLoader(file) filename: " + resource.getFilename());
System.out.println("ResourceLoader(file) size: " + resource.contentLength()); } /**
* 通过url前缀获取Resource
*
* @throws IOException
*/
public void getUrlResouce() throws IOException { Resource resource = context.getResource("url:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/");
System.out.println("ResourceLoader(url) filename: " + resource.getFilename());
System.out.println("ResourceLoader(url) size: " + resource.contentLength()); } /**
* 无前缀获取Resource
*
* 跟application context有关,本代码中的application context是根据classpath获取的,所以该方法中也是根据classpath前缀获取的Resource
*
* @throws IOException
*/
public void getResouce() throws IOException { Resource resource = context.getResource("test-resources.txt");
System.out.println("ResourceLoader(none) filename: " + resource.getFilename());
System.out.println("ResourceLoader(none) size: " + resource.contentLength()); } }

5.spring-resources.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="springResource" class="org.spring.resources.SpringResource"/> </beans>

6.JunitTestBase.java

package org.spring.resources.test;

import org.junit.After;
import org.junit.Before;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.util.StringUtils; /**
* Junit基类
*
*/
public class JunitTestBase { private ClassPathXmlApplicationContext context;
private String springXmlPath; /**
* 无参构造器,使用此构造器则使用默认spring配置文件
*/
public JunitTestBase() { } /**
* 含参构造器,初始化spring配置文件路径
*
* @param springXmlPath
* spring配置文件路径
*/
public JunitTestBase(String springXmlPath) {
super();
this.springXmlPath = springXmlPath;
} /**
* 加载spring配置文件到容器中,并启动容器
* 在@Test方法执行之前执行
*/
@Before
public void before() { if(StringUtils.isEmpty(springXmlPath)) {//默认spring配置文件
springXmlPath = "classpath:spring-*.xml";
}
//加载spring配置文件到spring容器中
context = new ClassPathXmlApplicationContext(springXmlPath.split("[,\\s]+"));
//启动spring容器,并将启动信号扩散器该容器下的所有组件中
context.start(); } /**
* 销毁Spring容器
* 在@Test方法执行之后执行
*/
@After
public void after() { if(context != null){
context.destroy();
} } /**
* 通过bean Id获取对象
*
* @param beanId
* bean id
* @return
*/
public Object getBean(String beanId) { return context.getBean(beanId); } }

7.TestSpringResources.java

package org.spring.resources.test;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream; import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;
import org.spring.resources.SpringResource;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.InputStreamResource;
import org.springframework.core.io.UrlResource; @RunWith(BlockJUnit4ClassRunner.class)//默认执行类,可不写
public class TestSpringResources extends JunitTestBase { //构造器初始化spring配置文件
public TestSpringResources() { super("classpath:spring-resources.xml"); } /**
* 测试UrlResource
*
* @throws IOException
*/
@Test
public void testUrlResources() throws IOException { UrlResource resource = new UrlResource("http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/");
System.out.println("UrlResource filename:" + resource.getFilename());
System.out.println("UrlResource size:" + resource.contentLength()); } /**
* 测试ClassPathResource
*
* @throws IOException
*/
@Test
public void testClassPathResource() throws IOException { ClassPathResource resource = new ClassPathResource("test-resources.txt");
System.out.println("ClassPathResource filename:" + resource.getFilename());
System.out.println("ClassPathResource size:" + resource.contentLength()); } /**
* 测试FileSystemResource
*
* @throws IOException
*/
@Test
public void testFileSystemResource() throws IOException { FileSystemResource resource = new FileSystemResource("E:\\code\\Spring-Resources\\src\\main\\resources\\test-resources.txt");
System.out.println("FileSystemResource filename:" + resource.getFilename());
System.out.println("FileSystemResource size:" + resource.contentLength()); } /**
* 测试InputStreamResource
*
* @throws IOException
*/
@Test
public void testInputStreamResource() throws IOException { InputStream is = new FileInputStream("E:\\code\\Spring-Resources\\src\\main\\resources\\test-resources.txt");
InputStreamResource resource = new InputStreamResource(is);
System.out.println("InputStreamResource filename:" + resource.getFilename());
System.out.println("InputStreamResource size:" + resource.contentLength()); } /**
* 测试ByteArrayResource
*
* @throws IOException
*/
@Test
public void testByteArrayResource() throws IOException { ByteArrayResource resource = new ByteArrayResource("Test Resource".getBytes());
System.out.println("ByteArrayResource filename:" + resource.getFilename());
System.out.println("ByteArrayResource size:" + resource.contentLength()); } /**
* 测试ResourceLoader-classpath前缀
*
* @throws IOException
*/
@Test
public void testResourceLoaderClassPath() throws IOException { SpringResource springResource = (SpringResource) super.getBean("springResource");
springResource.getClassPathResouce(); } /**
* 测试ResourceLoader-file前缀
*
* @throws IOException
*/
@Test
public void testResourceLoaderFile() throws IOException { SpringResource springResource = (SpringResource) super.getBean("springResource");
springResource.getFileResouce(); } /**
* 测试ResourceLoader-url前缀
*
* @throws IOException
*/
@Test
public void testResourceLoaderUrl() throws IOException { SpringResource springResource = (SpringResource) super.getBean("springResource");
springResource.getUrlResouce(); } /**
* 测试ResourceLoader-无前缀
*
* @throws IOException
*/
@Test
public void testResourceLoader() throws IOException { SpringResource springResource = (SpringResource) super.getBean("springResource");
springResource.getResouce(); } }

8.效果预览

  8.1 执行testUrlResources方法

  8.2 执行testClassPathResource方法 

  8.3 执行testFileSystemResource方法

  8.4 执行testInputStreamResource方法

  8.5 执行testByteArrayResource方法

  8.6 执行testResourceLoaderClassPath方法

  8.7 执行testResourceLoaderFile方法

  8.8 执行testResourceLoaderUrl方法

  8.9 执行testResourceLoader方法

参考:http://www.imooc.com/video/3758

Spring学习八----------Bean的配置之Resources的更多相关文章

  1. Spring学习七----------Bean的配置之自动装配

    © 版权声明:本文为博主原创文章,转载请注明出处 Bean的自动装配(Autowiring) no:不启用自动装配,此时需要手动注入.参考:Spring学习三----------注入方式 defaul ...

  2. Spring学习十一----------Bean的配置之基于Java的容器注解@Bean

    © 版权声明:本文为博主原创文章,转载请注明出处 @Bean -@Bean标识一个用于配置和初始化一个由SpringIOC容器管理的新对象的方法,类似于XML配置文件的<bean/> -可 ...

  3. Spring学习十----------Bean的配置之Autowired注解实现

    © 版权声明:本文为博主原创文章,转载请注明出处 @Required -@Required注解适用于bean属性的setter方法 -这个注解仅仅表示,受影响的bean属性必须在配置时被填充,通过在b ...

  4. Spring学习五----------Bean的配置之Bean的生命周期

    © 版权声明:本文为博主原创文章,转载请注明出处 Bean的生命周期 1.定义 2.初始化 3.使用 4.销毁 初始化和销毁的三种方式 1.实现org.springframework.beans.fa ...

  5. Spring学习九----------Bean的配置之Bean的定义及作用域的注解实现

    © 版权声明:本文为博主原创文章,转载请注明出处 Spring Bean常用注解 @Component:通常注解,可用于任何Bean @Repository:通常用于注解DAO层,即持久层 @Serv ...

  6. spring学习六----------Bean的配置之Aware接口

    © 版权声明:本文为博主原创文章,转载请注明出处 Aware Spring提供了一些以Aware结尾的接口,实现了Aware接口的bean在被初始化后,可以获取相应的资源 通过Aware接口,可以对S ...

  7. Spring学习四----------Bean的配置之Bean的配置项及作用域

    © 版权声明:本文为博主原创文章,转载请注明出处 Bean的作用域(每个作用域都是在同一个Bean容器中) 1.singleton:单例,指一个Bean容器中只存在一份(默认) 2.prototype ...

  8. spring 学习之 bean 的注入方式 property和constructor-arg的使用方式

    spring 学习之 bean 的注入方式 property和constructor-arg的使用方式. bean的注入方式: property 注入是: 通过setxx方法注入. construct ...

  9. 跟着柴毛毛学Spring(3)——简化Bean的配置

    通过前面的学习.我们会感觉到对于一个有较多Bean的大项目,Spring的配置会比較复杂. 那么接下来我们就介绍怎样简化Spring的配置. 简化Spring的配置主要分为两类: 1. 自己主动装配 ...

随机推荐

  1. 急速安装Ubuntu/windows双操作系统

    本文出自:http://www.cnblogs.com/svitter FAQ 因为很多人都不看FAQ,比如像我,所以直接把FAQ写在最前面,然后把正文卸载最后面逼你看- - 常用软件下载(官网) d ...

  2. shell的简单介绍

    一 什么叫shell,shell 是什么 如果考虑到操作系统其实是一组软件,我们可以发现应用程序其实是在最外层,就如同鸡蛋的外壳一样,因此这个也就被称为shell. 其实shell的功能只是提供用户操 ...

  3. Codeforces 460D. Little Victor and Set

    D. Little Victor and Set time limit per test:1 second memory limit per test:256 megabytes input:stan ...

  4. Codevs 4633 [Mz]树链剖分练习

    4633 [Mz]树链剖分练习 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 大师 Master 题目描述 Description 给定一棵结点数为n的树,初始点权均为0,有依次q个 ...

  5. 在类中写reponse语句

    原文发布时间为:2009-06-18 -- 来源于本人的百度文章 [由搬家工具导入] 在类文件中不能直接使用response.write,需要使用 System.Web.HttpContext.Cur ...

  6. C++调用Matlab引擎 图像读写与处理 (知识+代码篇)

    准备知识 之 Matlab Engine 执行命令 /* Execute matlab statement */ int engEvalString(Engine* ep, const char* s ...

  7. Python学习杂记_10_三元运算符

    常用三元运算符来简化分支和循环的代码: 分支简化: a = 1b = 2c = a if a > 1 else bprint(c) # 以上几行等同于 a = 1b = 2if a >1: ...

  8. PHP json_encode 转换成空对象和空数组

    对于以下对象 $foo = array( "bar1" => array(), "bar2" => array() ); 我想转换成 { " ...

  9. C++ 找不到方法标识符

    其实原因是这个CPP并没有面向对象的结构. 所以进行编译时是“顺序编译”的,而main函数的定义又在A的定义之前.自然找不到标识符了.

  10. AC日记——[Ahoi2009]Seq 维护序列seq bzoj 1798

    1798 思路: 维护两个标记: 乘:m  和  加:a 先下放乘,再下放加: 下放乘的时候要把子节点的加一块乘了: 开long long: 来,上代码: #include <cstdio> ...