源码下载

首先去 GitHub 上面下载源码。下载地址: ​​github.com/spring-proj…​​​ 注意如果觉得下载比较慢的话,可以先同步到自己的 gitee 仓库在下载,下面是我 gitee 仓库的地址 ​​​gitee.com/zhengsh/spr…​

配置信息

环境信息:

  • idea 2021.2
  • jdk 11
  • gradle-6.9.1

注意:尽量和我的环境信息保持一致,不然可能导致编译失败,或者导入项目的时候出一些奇奇怪怪的问题

导入项目

导入项目过后就是漫长的等待,等待编译,最终加载完成后,如下图所示(其实源码目录根目录下有一个 ​​import-into-idea.md​​​ 里面也有导入的说明,大家也可以参照这个执行): Spring 源码解析 | 5.3.x 源码编译_maven

修改镜像仓库地址

spring源码下载依赖时,默认使用的是spring的仓库,由于网络限制,建议在build.gradle中配置国内的阿里提供的镜像仓库下载

repositories {
//新增以下2个阿里云镜像
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
mavenCentral()
maven { url "https://repo.spring.io/libs-spring-framework-build" }
maven { url "https://repo.spring.io/milestone" } // Reactor
//新增spring插件库
maven { url "https://repo.spring.io/plugins-release" }
}

预编译 spring-oxm

执行命令 ​​./gradlew :spring-oxm:compileTestJava​

导入项目

idea 选择 file -> open -> 选择源码目录 -> 点击 open Spring 源码解析 | 5.3.x 源码编译_maven_02 再次弹出会话框选择 ​​​open as project​​​. Spring 源码解析 | 5.3.x 源码编译_maven_03 后续就是漫长的等待了, 这个具体的时间要看自己的电脑,以及对于依赖下载的速度了。

测试案例

创建模块

可以创建一个测试模块, ​​summer-test​​​ Spring 源码解析 | 5.3.x 源码编译_导入项目_04

添加依赖

然后在 build.gradle 添加依赖

dependencies {
compile(project(":spring-core"))
compile(project(":spring-aop"))
compile(project(":spring-beans"))
compile(project(":spring-context"))
}

测试代码

最后添加测试代码

public class BeanTest {

public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
UserService serviceService = applicationContext.getBean(UserService.class);
System.out.println(serviceService);
}
}

// AppConfig.java
@Configurable
public class AppConfig {

@Bean
private UserService user() {
return new UserService();
}
}

// UserService.java
public class UserService {

}

参考信息