Spring源码阅读目录
第一部分——IOC篇
第一章 Spring之最熟悉的陌生人——IOC
第二章 Spring之假如让你来写IOC容器——加载资源篇
第三章 Spring之假如让你来写IOC容器——解析配置文件篇
第四章 Spring之假如让你来写IOC容器——XML配置文件篇
第五章 Spring之假如让你来写IOC容器——BeanFactory和FactoryBean
第六章 Spring之假如让你来写IOC容器——Scope和属性填充
第七章 Spring之假如让你来写IOC容器——属性填充特别篇:SpEL表达式
第八章 Spring之假如让你来写IOC容器——拓展篇
第九章 Spring之源码阅读——环境搭建篇
第十章 Spring之源码阅读——IOC篇
第二部分——AOP篇
第十一章 Spring之不太熟的熟人——AOP
第十二章 Spring之不得不了解的内容——概念篇
第十三章 Spring之假如让你来写AOP——AOP联盟篇
第十四章 Spring之假如让你来写AOP——雏形篇
第十五章 Spring之假如让你来写AOP——Joinpoint(连接点)篇
第十六章 Spring之假如让你来写AOP——Pointcut(切点)篇
第十七章 Spring之假如让你来写AOP——Advice(通知)上篇
第十八章 Spring之假如让你来写AOP——Advice(通知)下篇
第十九章 Spring之假如让你来写AOP——番外篇:Spring早期设计
第二十章 Spring之假如让你来写AOP——Aspect(切面)篇
第二十一章 Spring之假如让你来写AOP——Weaver(织入器)篇
第二十二章 Spring之假如让你来写AOP——Target Object(目标对象)篇
第二十三章 Spring之假如让你来写AOP——融入IOC容器篇
第二十四章 Spring之源码阅读——AOP篇
第三部分——事务篇
第二十五章 Spring之曾经的老朋友——事务
第二十六章 Spring之假如让你来写事务——初稿篇
第二十七章 Spring之假如让你来写事务——铁三角篇
第二十八章 Spring之假如让你来写事务——属性篇
第二十九章 Spring之假如让你来写事务——状态篇
第三十章 Spring之假如让你来写事务——管理篇
第三十一章 Spring之假如让你来写事务——融入IOC容器篇
第三十二章 Spring之源码阅读——事务篇
第四部分——MVC篇
第三十三章 Spring之梦开始的地方——MVC
第三十四章 Spring之假如让你来写MVC——草图篇
第三十五章 Spring之假如让你来写MVC——映射器篇
第三十六章 Spring之假如让你来写MVC——拦截器篇
第三十七章 Spring之假如让你来写MVC——控制器篇
第三十八章 Spring之假如让你来写MVC——适配器篇
第三十九章 Spring之假如让你来写MVC——番外篇:类型转换
第四十章 Spring之假如让你来写MVC——ModelAndView篇
第四十一章 Spring之假如让你来写MVC——番外篇:数据绑定
第四十二章 Spring之假如让你来写MVC——视图篇
第四十三章 Spring之假如让你来写MVC——上传文件篇
第四十四章 Spring之假如让你来写MVC——异常处理器篇
第四十五章 Spring之假如让你来写MVC——国际化篇
第四十六章 Spring之假如让你来写MVC——主题解析器篇
第四十七章 Spring之假如让你来写MVC——闪存管理器篇
第四十八章 Spring之假如让你来写MVC——请求映射视图篇
第四十九章 Spring之假如让你来写MVC——番外篇:属性操作
第五十章 Spring之假如让你来写MVC——融入IOC容器篇
第五十一章 Spring之源码阅读——MVC篇
第五部分——Boot篇
第五十二章 Spring之再进一步——Boot
第五十三章 Spring之假如让你来写Boot——环境篇
第五十四章 Spring之假如让你来写Boot——注解篇(上)
第五十五章 Spring之假如让你来写Boot——注解篇(下)
第五十六章 Spring之假如让你来写Boot——SPI篇
第五十七章 Spring之假如让你来写Boot——配置文件篇(上)
第五十八章 Spring之假如让你来写Boot——配置文件篇(下)
第五十九章 Spring之假如让你来写Boot——番外篇:再谈Bean定义
第六十章 Spring之假如让你来写Boot——自动装配篇
第六十一章 Spring之假如让你来写Boot——番外篇:杂谈Starter
第六十二章 Spring之假如让你来写Boot——番外篇:重构BeanFactory
第六十三章 Spring之假如让你来写Boot——番外篇:再谈ApplicationContext
第六十四章 Spring之假如让你来写Boot——内嵌Web容器篇
第六十五章 Spring之假如让你来写Boot——Main方法启动篇
第六十六章 Spring之最终章——结语篇
文章目录
前言
对于Spring一直都是既熟悉又陌生,说对它熟悉吧,平时用用没啥问题,但面试的时候被问的一脸懵逼,就很尴尬,都不好意思在简历上写着熟悉Spring了
所以决定花点时间研究研究Spring的源码。主要参考的书籍是:《Spring源码深度解析(第2版)》、《Spring揭秘》、《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》
一、环境搭建
随着《Spring之假如让你来写IOC容器》 篇章落幕,接下来让我们进入崭新的开始——源码阅读 系列。首先,需要搭建一套spring源码的环境
啥?Spring还需要搭建环境?可能很多人会有这样子的疑惑。不是可以直接用Spring项目直接进行debug吗?其实这样子也是可以的,不过既然是阅读源码,还是弄下源码环境才算圆满
工具准备:
1、Gradle 7.3
2、jdk8
3、Spring 5.3.x
准备好以上工具后需要,还修改几处配置方便我们构建项目,如下:
1、修改gradle-wrapper.properties
原因:从本地获取Gradle速度快,http每次都要下载构建项目巨慢
把distributionUrl修改成本地的gradle,这里Gradle没有与Spring保持一致,是因为我用的idea比较古老,不支持Jdk18
distributionUrl=file\:///D:/Gradle/gradle-7.3-bin.zip
2、修改build.gradle文件
原因:加快下载依赖,国外的巨慢
在repositories节点下添加阿里云镜像
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
3、修改settings.gradle文件
原因:不做身份验证,不然会报git方面的错误
注释掉io.spring.ge.conventions,并添加阿里镜像(原因和上边修改依赖url一样,国内快,国外慢)
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
4、修改编码
构建项目会出现中文乱码,修改idea编码即可
打开 HELP->edit custom vm options,指定UTF-8编码,修改完需要重启idea
-Dfile.encoding=UTF-8
下边是我用高版本jdk遇到的问题,也顺手列一下
1、修改spring-beans.gradle文件和CompilerConventionsPlugin类
原因:警告也会停止编译
由于方法已经过期了,所以编译运行会报以下错误
注掉 CompilerConventionsPlugin 的 Werror
注掉 spring-beans.gradle 的 Werror
2、修改spring-oxm.gradle
原因:Jdk9之后没有tools.jar
由于使用高版本的jdk,会出现如下错误,升级xjc版本即可:
修改spring-oxm.gradle 文件下的xjc节点为2.3
二、新建测试模块
Spring源码构建完成后,接下来新建一个模块,用来专门测试用
1、新建Gradle模块
选择项目右键,新建Gradle模块,直接点击下一步
2、修改模块名称
模块名称以spring开头,这个貌似会检查,之前我尝试用别的名称开头,依赖其他模块时编译会失败
3、修改build.gradle文件名称
新建完模块后,刷新一下项目,等生成src目录后,将build.gradle改成与模块名一致(这里就改成spring-study.gradle)
啥?问我为啥这样子做?大概是因为这个吧
4、修改settings.gradle文件
将settings.gradle中新建的模块名挪到上方(ps:新建的模块可能在最底下,无法执行上边的逻辑)
总结
好了,Spring源码环境搭建大概就是这样子的,顺带吐槽下,用Gradle实在是有点不习惯,乱七八糟的问题遇到了一堆,不过好在最终还是搭好了 ε≡٩(๑>₃<)۶ 一心向学