- 首先,ClassPathResource 的构造方法有四个,一个已经过期的方法我这里没有列出来 。另外三个,我们一般调用一个参数的即可,也就是传入文件路径即可,它内部会调用另外一个重载的方法,给 classloader 赋上值(因为在后面要通过 classloader 去读取文件) 。
- 在 ClassPathResource 初始化的过程中,会先调用 StringUtils.cleanPath 方法对传入的路径进行清理,所谓的路径清理,就是处理路径中的相对地址、windows 系统下的 \ 变为 / 等 。
- getPath 方法用来返回文件路径,这是一个相对路径,不包含 classpath 。
- resolveURL 方法表示返回资源的 URL,返回的时候优先用 Class.getResource 加载,然后才会用 ClassLoader.getResource 加载,关于 Class.getResource 和 ClassLoader.getResource 的区别,又能写一篇文章出来,我这里就大概说下,Class.getResource 最终还是会调用 ClassLoader.getResource,只不过 Class.getResource 会先对路径进行处理 。
- getInputStream 读取资源,并返回 InputStream 对象 。
- createRelative 方法是根据当前的资源,再创建一个相对资源 。
如果不是使用 Spring,我们仅仅想自己加载 resources 目录下的资源,也可以采用这种方式:
ClassPathResource resource = new ClassPathResource("beans.xml");InputStream inputStream = resource.getInputStream();拿到 IO 流之后自行解析即可 。在 Spring 框架,构造出 Resource 对象之后,接下来还会把 Resource 对象转为 EncodedResource,这里会对资源进行编码处理,编码主要体现在 getReader 方法上,在获取 Reader 对象时,如果有编码,则给出编码格式:
public Reader getReader() throws IOException { if (this.charset != null) { return new InputStreamReader(this.resource.getInputStream(), this.charset); } else if (this.encoding != null) { return new InputStreamReader(this.resource.getInputStream(), this.encoding); } else { return new InputStreamReader(this.resource.getInputStream()); }}所有这一切搞定之后,接下来就是通过 XmlBeanDefinitionReader 去加载 Resource 了 。4.小结好啦,今天主要和小伙伴们分享一下 Spring 中的资源加载问题,这是容器启动的起点,下篇文章我们来看 XML 文件的解析 。
如果小伙伴们觉得有收获,记得点个在看鼓励下松哥哦~
【Spring 源码第一篇开整!配置文件是怎么加载的?】
推荐阅读
- 第一次购买羽毛球应该如何挑选
- 茶艺基本知识介绍,中国三峡第四届茶文化艺术节将于15日开幕,茶文化
- 不到五万,搞定你人生第一只钻表
- 第一次去海南旅游应该去哪里
- 茶叶A股第股,14年帕沙古树茶和92年的台地茶对比
- 茶的第功用,白毫茶功用多
- 第一个kafka程序,详谈生产者消费者,顺序消费重复消费问题
- 姜太公为什么自己不封神?
- 淘宝新店流量扶持什么时候开始计算 淘宝新开店铺第几天给流量
- 第二届海峡茶会以,第二届全茶会举办
