最近每周和小伙伴们分享一篇 Spring 源码文章,不知不觉已经连着发了 5 篇啦:
- Spring 源码解读计划
- Spring 源码第一篇开整!配置文件是怎么加载的?
- Spring 源码第二弹!XML 文件解析流程
- Spring 源码第三弹!EntityResolver 是个什么鬼?
- Spring 源码第四弹!深入理解 BeanDefinition
老实说,松哥写这五篇文章的时候,为了图方便,我就没在本地搭建 Spring 源码环境,因为在 IDEA 里边通过 Maven 依赖也可以方便的下载 Spring 源码,我就用了这种方式。
但是后来搞着搞着,有的时候想在源码上写点注释却写不了,因为通过 Maven 依赖的方式下载的 Spring 源码是只读的,没法修改,有的时候想自己修改一下看看效果也不方便。
所以想了想还是花点时间搭建一个 Spring 源码环境吧,也不费啥事。要做就做专业的,毕竟要做 Spring 源码分析系列文章,搭建一个 Spring 源码环境也是应该的。
那就搞起!
1.源码获取
Spring 源码仓库地址是:https://github.com/spring-projects/spring-framework。
大家可以直接下载 zip 压缩包,也可以 clone,建议通过 clone 的方式获取源码,这样方便切换到不同的分支查看不同时期的代码。
直接从 GitHub 上 clone 源码有点慢,所以我们可以先在自己的 Gitee 账户上新建一个仓库,新建的仓库选择从【从 GitHub/GitLab 导入仓库】,将 Spring 源码仓库导入到自己的 Gitee 上,然后再从 Gitee 上 clone,clone 速度提升十倍以上。
当然,如果小伙伴们懒得在 Gitee 上搞这一套,松哥现在已经弄好了,你也可以直接从下面这个地址 clone:
代码 clone 应该都会吧?算了本着手把手的原则,我还是说一下,执行如下命令 clone 代码:
1 | git clone https://gitee.com/lenve/spring-framework |
2.Gradle 问题
最新版的 Spring 源码是基于 Gradle 来构建的,松哥 2016 年那会搞 Android 的时候,Gradle 经常使用,现在搞 Java 后,还是以 Maven 为主,Gradle 使用稍微少一些。这里我们先来解决 Gradle 的问题。
有两种办法:
- 在电脑本地安装。
- 加载 Spring 源码时当场安装。
无论哪种方式,建议都安装适合 Spring 源码的版本,避免后期一些不必要的问题。
Spring 源码 clone 下来之后,大家在 spring-framework/gradle/wrapper/gradle-wrapper.properties
文件中,我们可以看到当前源码使用的 Gradle 版本:
1 | distributionBase=GRADLE_USER_HOME |
distributionUrl 中就是你要下载的 Gradle 地址,从中就可以看出 Gradle 版本号。
如果你想采用第一种方式安装 Gradle,就使用 distributionUrl 给出的地址去下载对应的 Gradle,下载成功后,解压,配置环境变量即可。这个比较简单,我就不多说了。
如果你想采用第二种方式,那么现在什么都不用做,一会导入项目的时候会自动下载 Gradle(松哥这里图省事采用这种方式)。
3.修改下载源
默认路径下载依赖构建项目比较慢,所以源码下载下来之后,我们首先进入到 build.gradle 文件中,添加下载源(原有的保留,添加 Alibaba 下载源):
1 | repositories { |
4.导入项目
接下来打开 IDEA,导入 Spring 源码,注意选择 Import Project:
注意各个选项不要选择错了:
项目导入成功之后,接下来会去下载相关依赖,这个过程所耗费的时间视网络情况而定。
依赖都下载之后,接下来编译项目,在菜单栏选择 Build->Build Project,或者直接点击🔨图标进行编译,如下:
编译成功后,每个项目下都会多出一个 build 目录,相当于 Maven 里边的 target,如下:
5.添加模块
接下来我们来添加一个 module,来使用一下这些源码。
项目右键单击,选择 New->Module:
选择 Gradle 创建一个 Java 项目:
给 module 取一个名字:
在新创建的 module 的 build.gradle 文件中,我们添加 spring-context 依赖,这个相当于 Maven 中的 pom.xml:
1 | dependencies { |
接下来我们写一个简单的 spring-context 的测试看一下。
首先创建一个 User 类:
1 | public class User { |
然后创建 resources/beans.xml 文件,配置该 Bean:
1 | <?xml version="1.0" encoding="UTF-8"?> |
最后创建测试方法:
1 | public class Main { |
运行该方法,结果如下:
如此,我们本地的 Spring 源码环境就算是搭建成功了。
6.小结
非常幸运,很多小伙伴反映的搭建 Spring 源码的问题我竟然一个都没遇到!
感兴趣的小伙伴可以试试松哥上面给出的方案。
好啦,小伙伴们要是觉得有收获,记得点个在看鼓励下松哥哦~