小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
源码下载
首先去 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源码下载依赖时,默认使用的是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
再次弹出会话框选择 open as project
.
后续就是漫长的等待了, 这个具体的时间要看自己的电脑,以及对于依赖下载的速度了。
测试案例
创建模块
可以创建一个测试模块, summer-test
添加依赖
然后在 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 {
}