Spring源码阅读(一):使用IDEA搭建Spring5.0.x源码阅读环境

3,553 阅读2分钟

说明

Spring源码阅读环境配置如下:

  • Spring 5.x版本
  • Gradle 4.8.1
  • JDK8
  • IDEA2020.1
  • win10

搭建步骤

1. 下载Spring源码

下载地址:Github链接,选择5.x版本

如果Github下载过慢,可以使用码云加速,镜像地址

另一种办法是通过fq配置代理,也可以加速下载

2. 配置Gradle

Spring基于gradle构建,需要先安装配置Gradle

Gradle下载地址,选择complete版本,下载后加入环境变量,通过gradle -v验证是否配置成功

3. 构建项目

在进行预编译之前,需要检查以下几个地方:

  • gradle.properties: 查看版本是否正确
  • jdk版本和gradle版本

在代码目录下执行命令:

gradlew :spring-oxm:compileTestJava

等待编译成功。编译过程可能遇到如下问题:

  • An exception occurred applying plugin request [id: 'com.gradle.build-scan', version: '1.8']

解决办法:Gradle版本问题,具体原因参考此链接

Gradle Build Tool versions Minimum plugin version Maximum plugin version
>= 6.0 3.0 3.3.1
5.0 - 5.6.4 2.0.2 3.3.1
4.1 - 4.10 1.8 1.16
4.0 1.7.4 1.16
2.0 - 3.5 1.0 1.16
< 2.0 not supported not supported
  • org.gradle.api.CircularReferenceException: Circular dependency between the following tasks: :spring-beans:compileGroovy --- :spring-beans:compileJava --- :spring-beans:compileKotlin --- :spring-beans:compileGroovy (*)

解决办法:循环引用问题,注释掉下面三行

4. 导入IDEA

File -> New -> Project from Existing Sources -> 找到 Spring 项目路径 -> 选中 build.gradle,并配置gradle,如下图所示

接下来idea会进行很长时间的build,下载相关jar包,耐心等待即可

可能出现如下问题:

  • 缺少jar包:spring-cglib-repack-x.x.x.jar、spring-objenesis-repack-x.x.jar

解决办法:在spring的解压目录下执行下面这两个命令

gradle objenesisRepackJar
gradle cglibRepackJar

调试代码

新建module,编写自己的代码,对spring代码进行走读。

关于module相关知识,可以参考另一篇文章:IDEA中Project和Module的关系

项目右击,New->Module

当然也可以创建基于Maven的module,如下所示:

创建module子项目以后,需要添加module依赖,方便导入相关包。如下所示:

至此,可以写代码了。我们创建一个简单的java bean,并打印。

Person.java:

public class Person {
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}
Beans.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

	<bean id="person" class="org.wds.Person">
		<property name="name" value="zhangsan"/>
	</bean>
</beans>
Main.java:

public class Main {

	public static void main(String[] args) {
		ApplicationContext context =
				new ClassPathXmlApplicationContext("Beans.xml");
		Person obj = (Person) context.getBean("person");
		System.out.println(obj.getName());
	}
}

运行结果如下所示:

至此,环境搭建成功,可以通过打断点对源代码进行调试和走读。