SPRING04_核心组件接口分析Resource具体实现类ResourceLoader资源读取器及策略模式
Posted 所得皆惊喜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SPRING04_核心组件接口分析Resource具体实现类ResourceLoader资源读取器及策略模式相关的知识,希望对你有一定的参考价值。
接下来我们将对SPRING中的核心接口进行一一详解
①. 核心组件接口分析Resource
-
①. 在Spring给我们暴露对外的操作里面,要么写XML要么写注解,第一个进入我们视线就是Resource(资源)
-
②. 下面将研究下这个Spring底层是如何定义这个Resource(资源)
②. Resource(资源)是个什么?
-
①. 如何分析这个组件是个什么东西?可以在idea里面使用快捷键Ctrl+f12,看这个组件有什么方法就行了
-
②. 按照类名Resource,它叫资源,按照方法它无外乎就来看看这个资源文件(getFile()),包括这个资源的路径在哪(getURL()),能不能打开(isOpen()),能不能读取(isReadable()),如果能读取就给资源准备一个通道(readableChannel() 这个是用nio来做的)
-
③. 这是Spring家定义的一个Resource资源接口,定义了一些能够快速的读取资源的办法
③. 关于Resource的具体实现类
-
①. 这个Resource资源接口有了以后,看实现类就会发现 Spring它的这个资源接口暴露了很多东西
-
②. ContextResource
(ContextResource.ClassRelativeContextResource):能从相对路径获取资源,只要是ContextResource这一块都是跟Web相关的,如果此时是一个Web项目,就可以从Web项目里面按照相对路径来获取资源) -
③. HttpResource
(Spring的资源也能从HTTP里面去获取资源,也就是说可以请求的是远程服务器去获取资源,请求远程的资源就会被封装成HttpResource) -
④. WritableResource
FileSystemResource:资源不仅能够存在类路径下,还能存到文件系统里面,比如我们的电脑硬盘
FileUrlResource:这里可以获取任意的位置,可以获取网络,磁盘等的资源
PathResource:有指定的一些路径,比如写过的classpath:xxxxx 地址 -
⑤. Spring能够加载资源的方式有很多。每一种不同的资源自然而然就对应资源下的一些接口。Spring暴露出来的Resource资源接口,所有的东西都是一个资源
④. ResourceLoader(资源读取器)
-
①. ResourceLoader也是一个接口,所以框架都是先定义好了接口抽象,有了接口,就知道了它所有的思想,有了接口就有一万种实现,这也是开闭原则最大的体现
-
②. 通过源码分析可以看到ResourceLoader接口一个设计模式的关键词叫Strategy interface (策略接口)
-
③. 资源加载器的作用?
- 它的作用就是根据给的一个路径是不是得到一个资源:Resource getResource(String location)
- Spring的源代码也写的非常清楚,资源获取的方法有很多
- 随便在Resource getResource(String location);这个方法的参数里面传路径,都能够进行一个解析
- ④. ResourceLoader的实现类
- DefaultResourceLoader:这是默认的资源读取器
- ClassRelativeResourceLoader:能读取类路径相对路径的资源
- FileSystemResourceLoader:能读取文件系统的资源
- ServletContextResourceLoader:能读取web项目的资源
- PathMatchingResourcePatternResolver:能获取进行路径匹配的资源
- 能看到ResourceLoader资源加载器 它唯一的一个作用就是在Resource getResource(String location);这个方法的参数里面传路径,都能够进行一个解析。
- ⑤. ResourceLoader资源加载器是一个策略接口,体现在哪?
- 这个坏境类是AbstractApplicationContext,会在构造方法中对资源加载器进行赋值处理
- 资源加载策略(ResourceClassLoader)
- 资源加载策略实现(ResourceClassLoader的具体实现类)
以上是关于SPRING04_核心组件接口分析Resource具体实现类ResourceLoader资源读取器及策略模式的主要内容,如果未能解决你的问题,请参考以下文章
Spring学习10-SpringMV核心组件2及SpringMVC项目示例