还在烦恼看不懂spring源码吗?试试让AI来帮助你

0 阅读6分钟

1 前言

读源码大家都觉得很痛苦。因为人的记忆力比较有限,通常会被大型项目中的依赖关系、复杂调用逻辑搞得心烦意乱。现在都说AI牛的不行,是时候把AI用到读源码这件事上了。

2 代码获取

spring-framework的官方仓库地址:

github.com/spring-proj…

如果没有梯子无法访问的话,可以在gitee上选择从GitHub/GitLab导入

image.png

在Git仓库URL一栏输入官方仓库地址:

image.png

就可以把spring-framework的源码同步到自己的gitee仓库了。同步完后,如果官方后续还有新的修改,可以点击强制同步按钮,再次把官方的代码同步过来。

image.png

3 JDK版本选择

现在JDK已经更新到25版了,我们在平常的学习中应该要尽可能的向新版本靠拢。实际生产中,虽然Oracle JDK是收费的,但是Open JDK是完全免费的。如果公司中有些新项目,可以尝试用用新版JDK。由于担心JDK25太新,可能存在依赖问题,以及IDEA的支持问题。所以稳妥起见我选择了JDK 21。我使用豆包AI帮忙列出了适用于JDK21的Spring全家桶有关版本,以下是适用于 JDK 21 的 Spring 生态核心组件版本兼容性说明:

组件推荐版本
JDK21(LTS)
Spring Framework6.2.x(或 6.1.x)
Spring Boot3.3.x(或 3.2.x,需选最新补丁版)
Spring Cloud2024.0.x(或 2023.0.x)
Spring Cloud Alibaba3.2.0+

4 代码编译

用git工具把gitee上的代码拉取到本地后。用IDEA编辑器打开源码所在的目录。网上有很多教程中都会教大家先下载、安装、配置gradle,再对spring-framework源码进行编译。但是,IDEA编辑器里其实可以自动安装gradle。在打开带有gradle配置文件的工程的时候,就会自动识别并安装了。我这里为了省事,就直接使用IDEA编辑器里自带的gradle了。等IDEA中的gradle依赖包等都下载好了以后,我们可以在编辑器的右侧看到一个大象的小图标。跟用maven来管理依赖的时候,maven的小图标位置是一样的。点开这个大象图表,可以看到有一个总的Tasks,还有各个模块的。

image.png

我们可以点开总的这个Tasks,然后依次点击clean->build,对整个工程进行构建

image.png

也可以点开各个模块,然后对单个模块进行构建。

image.png

构建成功后可以看到BUILD SUCCESS:\

image.png

5 运行测试

当某个模块或者所有模块都构建成功后,我们可以打开某个模块下的test目录,选择其中的单元测试类进行测试

image.png

例如这里我们点开了AnnotationBeanConfigurerTests.java,然后点击测试函数前面的小图标,开始运行测试。

image.png

我们可以在测试函数里打断点,就可以开始对spring源码进行debug了。

6 AI工具使用

这里主要介绍两款我常用的国内AI工具,一个是通义灵码的IDEA插件,一个是TRAE AI。

1 通义灵码IDEA插件

个人认为更适合用于编辑器内写代码的时候,一些小问题的查询修复,一些简单的重复性劳动的替代。例如,我们在看spring源码过程中,对某一段看的不是很懂的时候,可以选中这一段,然后右键选择添加到对话。

image.png

并在对话框中输入请解释选中代码,就可以让AI帮我们对选中代码进行一些解释,可以帮助我们更快理解代码。

image.png

image.png 可能是由于我仅仅用了通义的IDEA插件,所以总体上感觉通义灵码只能够胜任一些比较简单的工作。对于比较复杂的任务,效果就不太理想。这时候我一般都会选择用TRAE AI编辑器来完成。比如,接下来我想让AI对整个spring源码的各个模块进行深入阅读分析,并生成相应的技术总结文档。通义的IDEA插件中似乎现在默认都是使用阿里自己的编码模型,而无法选择其他诸如GLM、DeepSeek等表现更好的模型。

另外需要注意的是,通义的IDEA插件中,有两种模式选择:智能问答和智能体。

image.png

2 TRAE AI

TRAE AI编辑器的SOLO模式,集成了很多很好用的功能,并且支持多种国内主流模型。可以很智能的操作文件、查看代码。在平时工作中,不管是替代重复性工作,或者是排查代码BUG,都起到了很大的作用。现在来试试TRAE AI编辑器在源码阅读学习中的功效。

image.png

由于spring-framework整体的代码量比较大,一开始我用TRAE AI编辑器打开一整个spring-framework工程源码,进行阅读分析。受限于输入输出的上下文长度,对整个spring-framework工程源码进行阅读的效果不是很好。最后仅仅输出一个几千字的markdown文档,这对于spring-framework框架中涉及的内容来说,无疑是冰山一角。于是调整策略,让编辑器分别对framework-api、framework-bom、spring-context等不同的模块进行阅读分析。

image.png

在提示词方面,需要特别强调的是TRAE AI编辑器中的提示词优化功能确实非常棒。就在SOLO模式输入框的话筒按钮左边的星星按钮。最后经过优化的prompt指令如下所示。

在spring-framework项目的当前模块目录下,对该模块的源代码、配置文件、文档及相关资源进行全面系统的阅读与分析。分析内容应包括但不限于模块的核心功能、主要类与接口设计、关键实现逻辑、依赖关系、配置方式及使用场景。将分析结果整理成结构清晰、内容详实的Markdown文档,文档需包含模块概述、核心组件说明、关键代码解析、使用示例及注意事项等部分,并保存至当前目录。确保文档语言专业准确,技术细节描述清晰,便于其他开发人员快速理解该模块的设计与实现。

image.png

最后输出的结果如下所示,不但有分析整体代码逻辑,还有对涉及模式进行分析,也有依赖关系、配置方式等等。这样的文档,对我们进一步学习spring源码是具有一定参考价值的。

image.png

image.png

完整的项目代码仓库:gitee.com/chouchouxia…。每个模块的技术总结文档在当前模块的根目录下。如果你觉得这篇文章对你有点帮助的话,记得收藏点赞评论啊。