一、下载源码
在github或者gitee上下载spring-framework的特定版本的源码,这里选择5.3.8版本,openjdk的版本为8以上。新版本用的是gradle 7,添加依赖的命令不熟悉,故使用gradle 6版本进行编译。
二、配置仓库地址
下载好源码之后,解压并修改build.gradle文件中的仓库地址,加快编译速度。 编译仓库地址代码如下:
repositories {
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" }
}
三、预编译
根据官方编译文档,在解压之后的目录下执行预编译spring-oxm模块,编译命令如下:
gradlew :spring-oxm:compileTestJava
编译成功如下图所示,图中出现错误忽略即可。
四、导入IDEA编译
将源码导入idea,修改settings.gradle文件,将spring-aspects模块注释掉。之后等待idea自动下载gradle并开始编译,网速良好的情况下等待大概几分钟时间,编译成功。
五、测试
新建module,添加依赖,创建测试类。
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
compile(project(":spring-context"))
compile(project(":spring-beans"))
}
public class Test {
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
applicationContext.register(UserServiceImpl.class);
applicationContext.refresh();
UserService userService = applicationContext.getBean(UserService.class);
userService.sayHello();
}
}
public interface UserService {
void sayHello();
}
public class UserServiceImpl implements UserService{
@Override
public void sayHello() {
System.out.println("成功编译Spring源码!!!!!");
}
}
输出测试结果:
|