Spring源码调试环境搭建

一、实验环境

1.jdk1.8.0_171

2.gradle-5.3.1(Spring源码使用gradle构建的,关于gradle的安装和配置使用,请读者自行上网搜一下,这里不再赘述)

3.IntelliJ IDEA 2019.2

4.Spring-5.0.x

二、环境搭建

1.进入到GitHub官网并搜索spirng,找到对应的spring-framework工程,点击链接进入,如下图:
Spring源码调试环境搭建_第1张图片
2.切换到自己想要的spring源码版本,如下图:
Spring源码调试环境搭建_第2张图片
3.获取Git分支链接(我这里是用idea的git拉取源码,大家也可以把源码下载下来,再用idea导入,视个人习惯而定),如下图:
Spring源码调试环境搭建_第3张图片
4.在idea中用git拉取spring源码,(笔者已经拉取过spring5.0.x的源码,这里重新下载5.1.x来做演示,笔者编译的版本还是5.0.x的源码)如下图:
Spring源码调试环境搭建_第4张图片
Spring源码调试环境搭建_第5张图片

4.1 开始下载源码(需要等几分钟,等待下载完):
Spring源码调试环境搭建_第6张图片
4.2 下载完弹出导入窗口,如下:
Spring源码调试环境搭建_第7张图片
5. 导入源码,点击Yes后弹出导入窗口,如下(之前如果配置过gradle,这里不用作修改):
Spring源码调试环境搭建_第8张图片
5.1 点击OK后,开始构建(如果是第一次导入,需要下载依赖,可能需要等待一段时间,耐心等待依赖下载完成),如下图:
Spring源码调试环境搭建_第9张图片
5.2 导入完成后,如下图所示,可能spring-core项目可能会报错(如果没有报错,自己 重新构建 build --> build project,看有没有报错),这是由于 为了避免第三方class文件的冲突,Spring把最新的cglib和objenesis重新打包后放在了jar包中,并没有放在源码中,从而导致编译错误,需要我们自己导入这两个jar包
Spring源码调试环境搭建_第10张图片Spring源码调试环境搭建_第11张图片
6.解决上面源码中缺失cglib和objenesis的问题,网上给的解决方法是手动下载这两个jar包放到项目中或是自己用jar命令打包,笔者这里用gradle提供的打包工具解决以上问题,如下图(点击下图所示的gradle命令,运行完即可):
Spring源码调试环境搭建_第12张图片
Spring源码调试环境搭建_第13张图片
运行完两个命令后,发现spring-core项目中的build目录中已经存在了这两个jar包:
Spring源码调试环境搭建_第14张图片

7.引入以上连个包后, 重新构建 build --> build project,可能会报如下错误,只是些测试类的错误,不影响源码阅读和调试,把报错的单元测试类删掉即可,想解决的朋友可以自己搜索资料解决。
Spring源码调试环境搭建_第15张图片Spring源码调试环境搭建_第16张图片

8.解决了以上问题后,再重新编译,又报了以下类找不到的错误,发现这回不是单元测试类的错误,需要解决一下。这个错误提示是找不到AnnotationCacheAspect这个符号,而我们打开项目目录,发现可以找到AnnotationCacheAspect.aj这个文件,打开这个文件,发现是类的声明使用的是aspect而不是class,idea默认使用的编译器是javac,javac编译器肯定是识别不了 public aspect这样的语法的,java是不支持aspect这样的关键字的,aspect这个关键字是AspectJ才能识别的关键字,AspectJ是实现AOP编程的,spring-aspects这个项目和AOP有关,所以就需要用到AspectJ,需要AspectJ的编译器Ajc来对和AOP有关的*.aj文件进行编译。
Spring源码调试环境搭建_第17张图片
8.1 AspectJ最新版下载(下载jar包):
Spring源码调试环境搭建_第18张图片
8.2 AspectJ安装

打开命令行,cd到AspectJ的jar包所在的文件夹,运行java -jar aspectj-1.9.4.jar命令,打开AspectJ的安装界面,直接点击Next,如下图:
Spring源码调试环境搭建_第19张图片
接着选择jre的安装路径,继续Next。
Spring源码调试环境搭建_第20张图片
接着选择AspectJ的安装路径,然后Install安装。
Spring源码调试环境搭建_第21张图片
安装完成后在idea下配置AspectJ, 只有专业版的IntelliJ IDEA才支持AspectJ的开发,而且idea也提供了官方文档。

首先idea安装AspectJ支持插件,下图的两个插件:

Spring源码调试环境搭建_第22张图片
8.3 为spring-aspect 工程添加Facets属性,步骤如下:

File --> Project Structure --> Facets
Spring源码调试环境搭建_第23张图片
选择spring-aop.main
Spring源码调试环境搭建_第24张图片Spring源码调试环境搭建_第25张图片
再选择spring-aspects.main
Spring源码调试环境搭建_第26张图片Spring源码调试环境搭建_第27张图片
8.4 更改idea编译器,使idea能够编译*.aj文件,步骤如下:

Settings --> Build, Execution, Deployment -->Compiler -->Java Compiler

将编译器改为 Ajc,接着设置Ajc的安装目录,选择到aspectjtools.jar,同时,一定要将Delegate to Javac选项打钩,这个代理设置的作用是只将上面添加了Facets属性的AspectJ项目用Ajc编译器编译,其他的项目还是用默认的javac编译器编译。如果不勾选这个代理选项,则全部项目都使用Ajc编译器编译,可能会导致编译错误。
Spring源码调试环境搭建_第28张图片
如果有下图的错误,不要紧,只是idea对*.aj文件的语法要求,对编译项目没有影响。
Spring源码调试环境搭建_第29张图片
设置完以上步骤后,重新编译,就可以编译成功了,编译成功打印日志如下:
Spring源码调试环境搭建_第30张图片
至此,整个spring-framework5.0.x项目就编译完成了,就可以阅读和跟进调试spring源码了。

你可能感兴趣的:(Spring源码分析)