Resource接口为spring提供所有资源的顶层接口定义
AbstractResource为提供默认实现
FileSystemResource:可操作文件,URL,Spring5开始由NIO2实现具体操作
ByteArrayResource:对字节数组提供的数据的封装。
UrlResource
ClassPathResource:class path 类型资源的实现。
InputStreamResource :将给定的 InputStream 作为一种资源的 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路径匹配