实际上 Spring 针对不同类型的 Resource 都准备了对应的实现类,方便我们针对不同场景进行合适的使用,不同的 ApplicationContext 会对应生成其他的 Resource:ClassPathResource、ServletContextResource 等,而且 Resource 接口本身就是继承了 InputStreamSource (这个抽象类唯一的方法是返回一个 InputStream)
, 定义了很多的 I/O 相关的操作,其实现类也主要是针对不同的资源类型做出合适的实现 。
小结:通过 FileSystemXmlApplicationContext
这个 AC 实现原理为例子,初步的了解了 Resource 定位的解决方案,就是通过调用 getResourceByPath()
方法,重写了父类 DefaultResourceLoader
的方法,最后得到了 FileSystemResource
这个类型的 Resource 的定位实现 。那么此时这个 Resource 的定位过程已经完成,为 BeanDefinition 的载入创造了 I/O 操作的条件,但是具体的数据还没开始读入 。读入就是 BeanDefinition 的载入和解析过程了 。
其实 Resource 就是统一了资源的定义,各种 BeanDefinition 定义的资源(File,URL , XML...)都统一抽象成 Resource , 所有实现类都需要实现相关的 I/O 操作 。
而 ResourceLoader 就是根据某种匹配方式来创建匹配的 Resource,并返回 。
将其过程多捋几遍 , 初步理解其 BeanDefinition 的资源定位过程 。下一步就是 BeanDefinition 的载入和解析过程 。
【Spring 深入——IoC 容器 02】
推荐阅读
- Shell揭秘——程序退出状态码
- 基于PL022 SPI 控制器 海思3516系列芯片SPI速率慢问题深入分析与优化
- 六部恋爱甜甜电影推荐——冬天到了 一起恋爱吧 1. 这部电影也太好看了
- 0025:2011年NOIp普及组真题——瑞士轮题解
- 4 .NET 6学习笔记——如何在.NET 6的Desktop App中使用Windows Runtime API
- 学习ASP.NET Core Blazor编程系列八——数据校验
- 1 Redis—问题
- 之四 2流高手速成记:SpringBoot整合redis及mongodb
- 自己动手写线程池——向JDK线程池进发
- 微服务组件--限流框架Spring Cloud Hystrix分析