二 spring源码分析---资源模块接口设计

前言

spring framework将资源抽象,面向接口编程,以便使框架和具体实现相互分离,这也是spring非侵入式的体现

资源模块接口的设计图

《二 spring源码分析---资源模块接口设计》

接下来还是需要先了解每一个接口的功能

1.InputStreamSource

《二 spring源码分析---资源模块接口设计》

2.Resource
对底层资源的一种抽象描述,比如文件或classpath的资源;

《二 spring源码分析---资源模块接口设计》
3.WritableResource 
对Resource的扩展接口,扩展了写出的功能
《二 spring源码分析---资源模块接口设计》
4.AbstractResource 
为实现类提供便利的基类

5.BeanDefinitionResource 主要是包裹了一个BeanDefinition,其中

  • DescriptiveResource 包裹了一个description字符串
  • InputStreamResource  对于给定InputStream资源的接口,所以该类中的isOpen()方法总是返回true;
  • ByteArrayResource 包裹了一个字节数组 byteArray,是负责byte资源的接口;
  • FileSystemResource 包裹了一个File,负责文件资源的接口;
  • PathResource 包裹了一个Path,即负责nio中path的接口;
  • AbstractFileResolvingResource 解析URL为文件,如UrlResource, ClasspathResource;

6.UrlResource 负责URL定位的类,如果url的协议是”file:”, 也可以转为文件资源;

7.ClassPathResource 定位classpath下的资源

以上是对资源高度抽象的接口设计,下面要看到的是对资源加载的接口设计

《二 spring源码分析---资源模块接口设计》

8.ResourceLoader
加载资源的策略接口(如filesystem or classpath ), ApplicationContext继承了该功能,可以在ApplicationContext运行时,使用特定的资源加载策略读取资源;DefaultResourceLoader是一个独立的实现,在ApplicationContext外部使用;
《二 spring源码分析---资源模块接口设计》

9.ResourcePatternResolver
策略接口,根据location 模式(如ant-style)解析为Resource资源对象;ApplicationContext通过ResourceLoaderAware将ResourceLoader注入上下文,加载资源;

10.PathMatchingResourcePatternResolver 是一个独立的实现,在applicationcontext外部使用;输入的模式必须匹配实现的策略;该接口只是提供了转换方法而不是指定了资源模式的具体格式;
《二 spring源码分析---资源模块接口设计》

    原文作者:Spring Boot
    原文地址: https://blog.csdn.net/yamorn/article/details/44063377
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞