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工程,点击链接进入,如下图:
图一
2.切换到自己想要的spring源码版本,如下图:
图二
3.获取Git分支链接(我这里是用idea的git拉取源码,大家也可以把源码下载下来,再用idea导入,视个人习惯而定),如下图:
图三
4.在idea中用git拉取spring源码,(笔者已经拉取过spring5.0.x的源码,这里重新下载5.1.x来做演示,笔者编译的版本还是5.0.x的源码)如下图:
图四
图五

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

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

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文件进行编译。
图十七
8.1 AspectJ最新版下载(下载jar包):
图十八
8.2 AspectJ安装

打开命令行,cd到AspectJ的jar包所在的文件夹,运行java -jar aspectj-1.9.4.jar命令,打开AspectJ的安装界面,直接点击Next,如下图:
图十九
接着选择jre的安装路径,继续Next。
图二十
接着选择AspectJ的安装路径,然后Install安装。
图二十一
安装完成后在idea下配置AspectJ, 只有专业版的IntelliJ IDEA才支持AspectJ的开发,而且idea也提供了官方文档

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

图二十二
8.3 为spring-aspect 工程添加Facets属性,步骤如下:

File --> Project Structure --> Facets
图二十三
选择spring-aop.main
图二十四图二十五
再选择spring-aspects.main
图二十六图二十七
8.4 更改idea编译器,使idea能够编译*.aj文件,步骤如下:

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

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值