一、关键词
Spring源码调试:即在debug调试中查看Spring源码或者自己在源码中添加一些可辨识的代码,方便调试代码。
Spring源码注释:在Spring源码中添加一些注释,方便理解代码含义及思路
二、问题
利用IDEA工具可以很轻易的实现在debug调试时查看源码。
如图:我需要对org.springframework.security:spring-security-web:5.2.2.RELEASE包下的FilterChainProxy类进行调试。
调试界面
这样查看源码已经完成
接下来对源码添加可辨识代码+注释
很遗憾并没有达成预想的目的。
那么如何解决该问题呢?
三、思路
问题:上述已经完成了源码的编辑,但是程序却没有走编辑的源码。
原因:源码与其相应编译文件并不对应。源码实际上已经发生了改变,但是编译文件还是最初的。所以就会产生当前的问题。
解决思路1
下载源码,然后导入项目中,通过项目来对源码进行编译。使源码与编译文件相对应。
1.1下载源码,可以从本地maven仓库中获取(前提是已经通过maven下载过源码)
新的问题产生了:由于相关的依赖太繁杂,导致无法通过自身项目完成源码的编译。
解决思路2
既然思路1是由于相关依赖繁杂,那么就尝试去避免自己导入相关依赖。即下载完整源码。例如:我分析的是SpringSecurity源码,那么我只要下载SpringSecurity的完整源码,便不需要考虑相关依赖了。
下载地址:Spring项目
在github上下载源码。Github上源码下载比较慢,暂时没有找到其他资源库下载。
源码下载后发现Spring是通过Gradle管理仓库的。所以需要安装与配置Gradle。具体安装配置见Gradle官方文档
思路通了,这样就可以具体实施了。
四、解决方案
1. 安装配置Gradle。似乎不同版本的Gradle编译Spring源码时会出现一些问题。具体还没研究。我使用的是Gradle 5.6.4 亲测可用。
2. 导入Spring源码项目。这边就不赘述了。
设置自己的Gradle路径3. build源码
4. 对需要的源码进行编译
5. 打开自己的项目引入源码和编译文件
这样就完成对源码和编译文件的配置了
6. 接下来进行测试
6.1 对源码添加可辨识代码+注释
6.2 这样就看到源码项目中的文件也相应修改。我们需要对源码进行重新编译,才能使源码与编译文件相对应。
可以通过阿里库为build.gradle提升下载速度
// 阿里库
repositories {
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/repository/jcenter'}
maven { url 'https://repo.spring.io/plugins-snapshot' }
maven { url 'https://plugins.gradle.org/m2/' }
}
编译成功
6.3 成功后返回自己的项目,进行测试
调试成功五、总结
1.思路
运行的编译文件与源文件相对应
2.注意
每次修改完源码,一定记得重新编译,这样才可以使源码与编译文件相对应。
网友评论