Spring系列源码分析-4

Spring源码之核心组件接口-Resource

开始逐个分析Spring底层的各个组件

1、核心组件接口分析-Resource

在Spring给我们暴露对外的操作里面,要么写XML要么写注解,所以第一个进入我们视线就是Resource(资源)

所以研究下这个Spring底层是如何定义这个Resource(资源)的

2、Resource(资源)是个什么东西?

2.1 如何分析这个组件是个什么东西?可以在idea里面使用快捷键Ctrl+f12,看这个组件有什么方法就行了

 

2.2 按照类名Resource,它叫资源,按照方法它无外乎就来看看这个资源文件(getFile()),包括这个资源的路径在哪(getURL()),能不能打开(isOpen()),能不能读取(isReadable()),如果能读取就给资源准备一个通道(readableChannel() 这个是用nio来做的)

2.3 这其实就是Spring家定义的一个Resource资源接口

2.4 这个Resource资源接口其实就是定义了一些能够快速的读取资源的办法。

3、这个Resource资源接口有了以后,它的实现类有:

3.1 这个Resource资源接口有了以后,看实现类就会发现 Spring它的这个资源接口暴露了很多东西

3.2 Spring从哪能获取Resource资源?

1、ContextResource

(ContextResource.ClassRelativeContextResource):能从相对路径获取资源,只要是ContextResource这一块都是跟Web相关的,如果此时是一个Web项目,就可以从Web项目里面按照相对路径来获取资源

2、HttpResource

Spring的资源也能从HTTP里面去获取资源,也就是说可以请求的是远程服务器去获取资源,请求远程的资源就会被封装成HttpResource

3、WritableResource

FileSystemResource:资源不仅能够存在类路径下,还能存到文件系统里面,比如我们的电脑硬盘

FileUrlResource:这里可以获取任意的位置,可以获取网络,磁盘等的资源

PathResource:有指定的一些路径,比如写过的classpath:xxxxx 地址

4、所以Spring能够加载资源的方式有很多。每一种不同的资源自然而然就对应资源下的一些接口。所以这就是Spring暴露出来的Resource资源接口,所有的东西都是一个资源

4、资源有了以后,接下来就有了一个ResourceLoader(资源读取器)来读取Resource资源

1、发现这个ResourceLoader也是一个接口,所以框架都是先定义好了接口抽象,有了接口,就知道了它所有的思想,有了接口就有一万种实现,这也是开闭原则最大的体现

2、一上来就看到了这个ResourceLoader接口一个设计模式的关键词 叫Strategy interface (策略接口)

3、资源加载器的作用?

1、它的作用就是根据给的一个路径是不是得到一个资源 :Resource getResource(String location);

2、而且Spring的源代码也写的非常清楚,资源获取的方法有很多

随便在Resource getResource(String location);这个方法的参数里面传路径,都能够进行一个解析

ResourceLoader的实现类

1、DefaultResourceLoader:这是默认的资源读取器

2、ClassRelativeResourceLoader:能读取类路径相对路径的资源

3、FileSystemResourceLoader:能读取文件系统的资源

4、ServletContextResourceLoader:能读取web项目的资源

5、PathMatchingResourcePatternResolver:能获取进行路径匹配的资源

6、能看到ResourceLoader资源加载器 它唯一的一个作用就是在Resource getResource(String location);这个方法的参数里面传路径,都能够进行一个解析。

5、而且看源码,说ResourceLoader资源加载器是一个策略接口,体现在哪?

 

1、资源加载器能够加载各种资源,所以进入这个getResource方法打开它的实现里面就会定位到到底是哪些东西,这其实也是一个策略

2、也就是说有一个ResourceLoader接口,这个接口读取资源是有很多种算法,按照策略模式应该是这样的

3、按照策略模式,是有一个环境类,这个环境类要持有一些策略

4、这个策略会被抽取成一个接口,这就是资源加载的策略接口

5、这个资源加载策略接口有很多的资源加载策略的实现

6、所以这个环境类只要持有这个资源加载策略接口,然后进行动态的切换是什么实现,就能从什么地方加载相应的资源

7、这就是策略模式的一个体现

8、首先看到了策略在资源加载策略接口已经定义,然后它的实现确实有很多种办法,但到底是哪个环境类来持有它,这才是最最最重要的

9、策略模式到底谁持有这个资源加载策略能够动态的切换策略,就得来看一下

10、这个ResourceLoader 打开它的实现,发现ResourceLoader 还跟ApplicationContext还有关系

11、也就是IOC容器也是一种资源加载器,其实后来分析IOC容器的时候就会看到它的资源加载过程

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值