文档章节

Spring源码学习笔记-1-Resource

zypy333
 zypy333
发布于 2018/12/15 02:00
字数 779
阅读 23
收藏 2

 

打算补下基础,学习下Spring源码,参考书籍是《Spring源码深度解析》,使用版本是Spring 3.2.x,本来想试图用脑图记录的,发现代码部分不好贴,还是作罢,这里只大略记录下想法,不写太细了

 

 类图如上,

文件结构图如上。

可以看到 这些都在IO目录下,帮助类集中存在support目录下。最根级的接口是InputStreamSource,只有getInputStream()一个方法,在类中说明了,这是用来获取InputStream的,期望每次调用都返回新的stream。没有单纯实现这个接口的类,不太清楚为什么只是单独提出来做接口。

Resource作为继承的子类,多定义了很多方法

这些方法在AbstractResource都有了默认实现

public boolean exists() {
		// Try file existence: can we find the file in the file system?
		try {
			return getFile().exists();
		}
		catch (IOException ex) {
			// Fall back to stream existence: can we open the stream?
			try {
				InputStream is = getInputStream();
				is.close();
				return true;
			}
			catch (Throwable isEx) {
				return false;
			}
		}
	}

先用获得文件判断是否存在,获得文件的过程中的IOException 再试图获取流,这个过程还可能抛错,如果获取文件过程中虽然有抛错,但是获取流成功了,也算成功,算是一种双保险,英文里叫Fall back,这里面的getFile在本类中有个 方法,直接抛错,到子类里去实现。随便找两个实现看看。

先看比较简单的,getFile直接返回成员变量file,file由构造器初始化。

ClassPathResource中没找到getFile,原来在父类的AbstractFileResolvingResource中, 可以看到他使用了ResourceUtils的工具类的获取方法。AbstractFileResolvingResource方法里用了很多getURL方法,但是都没有具体实现,实现都在子类里,感觉 绕来绕去的

再看类介绍,这个类是用来把URI转成File类的中间抽象类,这样大概可以看出,最上面那张图真的是不同层级的抽象 FileSystemResource因为直接能拿到file,所很简单,直接继承就行了,classpath,sevletcontext,因为不是实际的File,加了层url的转换,他们获取url的方式不同,所以在子类里实现,但是从url转到file又是相通的,所以在父类实现。其他功能则从工具类里获得。

关于这个toURI方法,可以看这个链接

https://blog.csdn.net/zunguitiancheng/article/details/79196598

这样转了一圈,上面图里很多类都看了,还有WritableResource ,这个类是FileSystemResource ,表示可写,所以有输出流。另外ContextResource的子类在web包里。

 

 

ps idea的 alt+7的structure视图,纵观方法很好用

参考文章 :https://www.cnblogs.com/zrtqsk/p/4015985.html  这篇讲的很细,很值得看 关于ClassPathResource的可以进去看

© 著作权归作者所有

共有 人打赏支持
zypy333
粉丝 2
博文 12
码字总数 10392
作品 0
乌鲁木齐
私信 提问
springmvc+mybatis学习笔记(汇总)

springmvc+mybatis学习笔记(汇总) 标签 : springmvc mybaits [TOC] 笔记分为两大部分:mybatis和springmvc mybatis springmvc 笔记内容主要是mybatis和springmvc的一些基本概念和使用方法,...

brianway
2016/03/30
1K
2
Spring源码解析系列之IOC容器(一)

前言 实际上我所有的博客都是原来对原来印象笔记里笔记内容的加工,关于Spring源码自己已经解析了很多遍,但是时间长总是忘记,写一篇博客权当加强记忆,也算再次学习下大师们的设计思想,思...

后厂村老司机
2018/06/02
0
0
工作4年多才学会怎么去读源码,可悲么?

最近慢慢的尝试去看spring的源码,学习spring,以前都是只会用就行了,但是越是到后面,发现只是懂怎么用还不够,在面试的时候也会经常被问到一些开源框架的源码问题,即使在网上各种百度,当...

麦克斯
01/07
0
0
Spring学习笔记1——基础知识

1.在java开发领域,Spring相对于EJB来说是一种轻量级的,非侵入性的Java开发框架,曾经有两本很畅销的书《Expert one-on-one J2EE Design and Development》和《Expert one-on-one J2EE deve...

李长春
2011/10/09
0
0
【Spring】BeanFactory解析bean详解

在该文中来讲讲Spring框架中BeanFactory解析bean的过程,该文之前在小编原文中有发表过,要看原文的可以直接点击原文查看,先来看一个在Spring中一个基本的bean定义与使用。 Spring配置文件r...

weknow
2017/04/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Windows 上安装 Scala

在安装 Scala 之前需要先安装 Java 环境,具体安装的详细方法就不在这里描述了。 您可以自行搜索我们网站中的内容获得其他网站的帮助来获得如何安装 Java 环境的方法。 接下来,我们可以从 ...

honeymose
今天
1
0
数据库篇多表操作

第1章 多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系...

stars永恒
今天
3
0
nginx日志自动切割

1.日志配置(Nginx 日志) access.log----记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;error.log------记录服务器错误的日志 #配置日志存储路径:location / {      a...

em_aaron
昨天
5
0
java 反射

基本概念 RTTI,即Run-Time Type Identification,运行时类型识别。RTTI能在运行时就能够自动识别每个编译时已知的类型。   要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运...

细节探索者
昨天
2
0
推荐转载连接

https://www.cnblogs.com/ysocean/p/7409779.html#_label0

小橙子的曼曼
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部