001 Resource专题

一 . 概述

  在spring提出了一个Resource接口,其描述了对资源的统一操作.

  另外提供了一系列的实现,我们可以使用这些实现类完成对资源的读取.


 二 . Resource接口

我们看到Resource接口中定义对资源的操作,其中我们可能最为关心的就是getFile()了.

我们看下接口的声明:

public interface Resource extends InputStreamSource.

我们看到了InputStreamSource接口,我们现在看下这个接口.

我们看到这个接口定义了获取输入流的方式.


 三 .Reource接口的使用方式

  spring将资源描述成为Reource,其中有两个核心的方法.

  (1)getFIle()

  (2)getInputStream()

通过上面的两个方法我们就能完成对资源文件的读取工作.

  可是Resource仅仅是接口,我们现在需要的是Resource的实现类.


 四 .Resource的实现类

  我们可能最为常用的实现类就是下面的两个了.

  (1)ClassPathResource : 该实现类描述了类路径下在资源.

  (2)FileSystemResource : 该实现类描述了文件系统下的资源.

当我们使用存放在不同位置的资源的时候,我们就可以使用不同的实现类来获取Resource对象,然后就可以使用getFile()或者getInputStream()方法进行操作了.


  五 . 问题的出现

  Resource的子类实在是太多了,当我们在不同的环境下就需要使用不同的实现类,这对于我们来说是一个负担.

  spring意识到这是一个问题,于是提供了一个统一的接口来描述资源的获取.

  ResourceLoader接口:

我们看到这个接口之中有一个很好的方法,通过提供的资源路径来获取资源.

  也就是说我们根本就用对Resource的实现了进行操作了.

我们只需要传入对应的资源路径描述符就可以了.

常见的路径描述符:

  classpath: 描述类路径下的资源

  file: 描述文件系统

  http : 描述网络资源


六 . ResourceLoader的实现类

  我们一般会使用一个默认的实现类帮助我们完成.

  DefaultResourceLoader .


七 . 测试

    @Test
    public void test1() throws Exception {
        //创建一个默认的资源加载器
        ResourceLoader loader = new DefaultResourceLoader();
        //从加载器之中获取Resource
        Resource resource = loader.getResource("classpath:aa.txt");
        //将resource之中的文本打印出来
        System.out.println(new String(FileCopyUtils.copyToByteArray(resource.getInputStream())));
    }

在上面的测试用例之中,我们首先创建了一个默认的资源加载器,然后提供资源的路径获取资源对象.

  最后我们就可以操作这个Resource了.


八 .总结

  我们以后如果出现了读取资源的操作,

  我们就可以使用spring提供的Resource这一套体系帮助我们来完成.

猜你喜欢

转载自www.cnblogs.com/trekxu/p/9063296.html
001