导入 idea 的文档地址:
https://github.com/spring-projects/spring-framework/blob/main/import-into-idea.md
![手把手带你编译Spring框架源码,让你的学习事半功倍](http://img.jiangsulong.com/220430/1111224b0-15.jpg)
文章插图
根据文档的提示在导入 idea 之前需要去 Precompile spring-oxm , 也就是预编译 spring-oxm 这个项目 。运行 ./gradlew
:spring-oxm:compileTestJAVA.
![手把手带你编译Spring框架源码,让你的学习事半功倍](http://img.jiangsulong.com/220430/11112211S-16.jpg)
文章插图
预编译起来也很快 , 我电脑上一共耗时 23 毫秒 。
然后我们还要预编译下 spring-core 这个项目 , 因为后面我们运行测试模块的时候需要用到里面的类 。执行:
./gradlew :spring-core:compileTestJava.
![手把手带你编译Spring框架源码,让你的学习事半功倍](http://img.jiangsulong.com/220430/1111224627-17.jpg)
文章插图
导入IDEA
- 开始使用idea导入Spring源码 , File -> New -> Project from Existing Souces…
![手把手带你编译Spring框架源码,让你的学习事半功倍](http://img.jiangsulong.com/220430/1111225957-18.jpg)
文章插图
- 选择 Spring 源码项目的目录 , 进而选择根目录当中的 build.gradle 文件导入;
![手把手带你编译Spring框架源码,让你的学习事半功倍](http://img.jiangsulong.com/220430/1111221307-19.jpg)
文章插图
- 导入 idea 之后会开始自动构建、建立索引 , 这个过程也是很漫长 , 你只能等 , 我这边用了不到7分钟 , 看电脑性能;
![手把手带你编译Spring框架源码,让你的学习事半功倍](http://img.jiangsulong.com/220430/1111224330-20.jpg)
文章插图
- 接下来我们对 idea 进行一些设置 , 不然每次 idea 运行都会通过 gradle 去编译运行 。gradle 运行编译特别慢 , 需要改成idea自己编译运行.
![手把手带你编译Spring框架源码,让你的学习事半功倍](http://img.jiangsulong.com/220430/1111223153-21.jpg)
文章插图
说明一下 , 这里不是一定要改 , 但是如果你不改用默认的则会特别慢 , 改成idea快的不止一点点 。
到这 , 我们的 spring 框架源码就编译完了 , 为了检验我们的劳动成果 , 下面建一个 moudle 来测试一下 。
验证测试
- 在我们的 spring 源码项目下新建我们自己的测试module , 如下图所示;
![手把手带你编译Spring框架源码,让你的学习事半功倍](http://img.jiangsulong.com/220430/11112245E-22.jpg)
文章插图
![手把手带你编译Spring框架源码,让你的学习事半功倍](http://img.jiangsulong.com/220430/1111225T4-23.jpg)
文章插图
输入测试的 moudle 名:
![手把手带你编译Spring框架源码,让你的学习事半功倍](http://img.jiangsulong.com/220430/1111224462-24.jpg)
文章插图
- 建好项目之后再 gradle 的配置文件中添加 spring 的依赖,相当于你建了一个maven项目 , 在pom文件中添加spring的依赖;
implementation(project(":spring-context"))
修改后的配置:![手把手带你编译Spring框架源码,让你的学习事半功倍](http://img.jiangsulong.com/220430/1111225256-25.jpg)
文章插图
- 写测试代码;
- 配置类的代码 , 用于指定扫描的bean;
package com.sevenluo.spring.config;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;@Configuration@ComponentScan("com.sevenluo.spring")public class AppConfig {//扫描ccom.sevenluo.spring包下面的所有bean}
- 写一个sevice , 被扫描的bean;
package com.sevenluo.spring.services;import org.springframework.stereotype.Service;@Servicepublic class HelloService { public void hello() {System.out.println("Hello,sevenluo!"); }}
- 测试类代码;
![手把手带你编译Spring框架源码,让你的学习事半功倍](http://img.jiangsulong.com/220430/1111226363-26.jpg)
文章插图
- 右键运行——可能你会出现一些错误;比如博主这里就出现了ava: 程序包jdk.jfr不存在 错误;
![手把手带你编译Spring框架源码,让你的学习事半功倍](http://img.jiangsulong.com/220430/1111223517-27.jpg)
文章插图
这个问题是因为 jdk.jfr 是 java9 以后才有的模块,而 spring 源码 5.3.8 版本已经使用这个包 , 所以我们需要设置我们项目配置的 jdk 版本高于9 。
推荐阅读
- EwoMail 还在用QQ邮箱?手把手教你搭建属于自己的域名邮箱
- 如何在Jenkins上自动化部署Vue,手把手教你
- 手把手教你自制一寸两寸证件照!
- Python正则表达式保姆式教学,带你精通大名鼎鼎的正则
- 一文带你详解 Chrome F12 Network 选项
- C语言编译器之一,GCC
- 带你破解DDOS攻击的原理
- 带你了解 免杀的小知识
- 怎么学习网络安全?这篇文带你从入门级开始学习网络安全
- 手把手教你快速搭建一个可视化拖拽平台