手把手带你编译Spring框架源码,让你的学习事半功倍( 三 )


导入 idea 的文档地址:
https://github.com/spring-projects/spring-framework/blob/main/import-into-idea.md

手把手带你编译Spring框架源码,让你的学习事半功倍

文章插图
 
根据文档的提示在导入 idea 之前需要去 Precompile spring-oxm  , 也就是预编译 spring-oxm 这个项目 。运行 ./gradlew
:spring-oxm:compileTestJAVA.
手把手带你编译Spring框架源码,让你的学习事半功倍

文章插图
 
预编译起来也很快 , 我电脑上一共耗时 23 毫秒 。
然后我们还要预编译下 spring-core 这个项目 , 因为后面我们运行测试模块的时候需要用到里面的类 。执行:
./gradlew :spring-core:compileTestJava.
手把手带你编译Spring框架源码,让你的学习事半功倍

文章插图
 
导入IDEA
  1. 开始使用idea导入Spring源码 , File -> New -> Project from Existing Souces…
 
手把手带你编译Spring框架源码,让你的学习事半功倍

文章插图
 
  1. 选择 Spring 源码项目的目录 , 进而选择根目录当中的 build.gradle 文件导入;

手把手带你编译Spring框架源码,让你的学习事半功倍

文章插图
 
  1. 导入 idea 之后会开始自动构建、建立索引 , 这个过程也是很漫长 , 你只能等 , 我这边用了不到7分钟 , 看电脑性能;

手把手带你编译Spring框架源码,让你的学习事半功倍

文章插图
 
  1. 接下来我们对 idea 进行一些设置 , 不然每次 idea 运行都会通过 gradle 去编译运行 。gradle 运行编译特别慢 , 需要改成idea自己编译运行.

手把手带你编译Spring框架源码,让你的学习事半功倍

文章插图
 
说明一下 , 这里不是一定要改 , 但是如果你不改用默认的则会特别慢 , 改成idea快的不止一点点 。
到这 , 我们的 spring 框架源码就编译完了 , 为了检验我们的劳动成果 , 下面建一个 moudle 来测试一下 。
验证测试
  1. 在我们的 spring 源码项目下新建我们自己的测试module , 如下图所示;

手把手带你编译Spring框架源码,让你的学习事半功倍

文章插图
 

手把手带你编译Spring框架源码,让你的学习事半功倍

文章插图
 
输入测试的 moudle 名:
手把手带你编译Spring框架源码,让你的学习事半功倍

文章插图
 
  1. 建好项目之后再 gradle 的配置文件中添加 spring 的依赖,相当于你建了一个maven项目 , 在pom文件中添加spring的依赖;
implementation(project(":spring-context"))修改后的配置:
手把手带你编译Spring框架源码,让你的学习事半功倍

文章插图
 
  1. 写测试代码;
  • 配置类的代码 , 用于指定扫描的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框架源码,让你的学习事半功倍

文章插图
 
  1. 右键运行——可能你会出现一些错误;比如博主这里就出现了ava: 程序包jdk.jfr不存在 错误;

手把手带你编译Spring框架源码,让你的学习事半功倍

文章插图
 
这个问题是因为 jdk.jfr 是 java9 以后才有的模块,而 spring 源码 5.3.8 版本已经使用这个包 , 所以我们需要设置我们项目配置的 jdk 版本高于9 。


推荐阅读