Resource接口为spring提供所有资源的顶层接口定义

AbstractResource为提供默认实现

FileSystemResource:可操作文件,URL,Spring5开始由NIO2实现具体操作
ByteArrayResource:对字节数组提供的数据的封装。
UrlResource
ClassPathResource:class path 类型资源的实现。
InputStreamResource :将给定的 InputStream 作为一种资源的 Resource 的实现类。

【Spring源码系列】IOC-Resource统一资源定义与加载

自定义Resource

继承AbstractResource,根据当前的具体资源特性覆盖相应的方法即可

Spring 资源加载的统一抽象ResourceLoader

DefaultResourceLoader

  • 扩展点:ProtocolResolver-自定义ResourceLoader实现
    • DefaultResourceLoader#addProtocolResolver(ProtocolResolver)
  • (1)通过 ProtocolResolver 来加载资源,成功返回 Resource
  • (2)location 以 “/” 开头,则构造 ClassPathContextResource 类型资源并返回
  • (3)若 location 以 “classpath:” 开头,则构造 ClassPathResource 类型资源并返回
  • (4)尝试构造 URL ,通过它进行资源定位,若没有则抛出 MalformedURLException 异常,返回ClassPathContextResource;否则(ResourceUtils.isFileURL(url) ? new FileUrlResource(url) : new UrlResource(url));

FileSystemResourceLoader
ClassRelativeResourceLoader: 可以根据给定的class 所在包或者所在包的子包下加载资源。
ResourcePatternResolver

  • 支持根据指定的资源路径匹配模式每次返回多个 Resource 实例
  • ResourcePatternResolver 在 ResourceLoader 的基础上增加了 #getResources(String locationPattern) 方法,以支持根据路径匹配模式返回多个 Resource 实例。
  • 同时,也新增了一种新的协议前缀 “classpath*:”,该协议前缀由其子类负责实现。
  • 常用子类: PathMatchingResourcePatternResolver 默认支持Ant路径匹配

【Spring源码系列】IOC-Resource统一资源定义与加载

相关文章: