@zhuanxu
2018-03-07T14:59:01.000000Z
字数 1045
阅读 1620
spring-boot
Spring提出了一套基于 org.springframework.core.io.Resource和 org.springframework.core.io.ResourceLoader接口的资源抽象和加载策略。
一个Resource的类图,其中 Resource 接口作为所有资源的抽象和访问接口
上图中列出的ClassPathResource,该实现从Java应用程序的ClassPath中加载具体资源并进行封装,可以使 用指定的类加载器(ClassLoader)或者给定的类进行资源加载。
我们来看Resource的接口定义:
通过这些方法,我们可以查询资源状态、访问资源内容,根据当前资源创建新的相对资源。如果我们想实现自己的Resource,只要继承自AbstractResource,实现自己关注的方法即可。
有了资源后,下一步就是去查找和定位这些资源了,这就到了 ResourceLoader。
ResourceLoader 最重要的方法是 Resource getResource(String location) 我们可以根据位置返回Resource。
DefaultResourceLoader 是 ResourceLoader 的默认实现,重点看 getResource 的逻辑:
看完 ResourceLoader 我们再看 ResourcePatternResolver,在 ResourceLoader 基础上新增了批量查找功能,ResourceLoader每次只能根据资源路径 返回确定的单个Resource实例,而ResourcePatternResolver则可以根据指定的资源路径匹配模式, 每次返回多个 Resource实例。
ResourcePatternResolver 最常用的一个实现是 PathMatchingResourcePatternResolver,该实现类支持ResourceLoader级别的资源加载,支持基 于Ant风格的路径匹配模式(类似于**/*.suffix之类的路径形式),支持ResourcePatternResolver新 增加的classpath*:前缀等,基本上集所有技能于一身。
下面是整个的类图