如何阅读Spring源码
Spring源码有100w+行,所以在阅读源码的过程中不可能把每一行代码都能读懂,别人写的代码一行不差的不懂也是意见困难的事情
所以在阅读的过程中要抓住几个主要的关键点,进行调试跟踪,切记不要陷入太深,能够理解大概的思路和原理就可以了。
阅读之前的准备工作
既然要阅读源码,首先要准备的就是下载源码,然后进行编译。
源码下载
我这里选择了5.2.9.RELEASE版本
- 下载源码 可以从github进行clone,也可以直接下载对应版本的release包
- 构建工具准备 Spring是用gradle进行版本依赖管理的,类似于maven,在编译之前可以自己安装Gradle,也可以不安装因为在spring的gradle/wrapper目录下有一个gradle-wrapper.properties文件里面已经写了,构建的时候会自动下载gradle
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
- 修改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" }
}
需要注释掉build.gradle文件中plugins中的 io.spring.gradle-enterprise-conventions,以为我编译的时候这个一致报错,后面注释之后才编译成功。
开始编译
- 在Spring目录的根目录下执行命令
gradlew :spring-oxm:compileTestJava
在编译过程中 我这边不是一下次编译成功的,也是重试了几个,包括因为网络问题导致的失败,正常情况下是可以成功的。如果在编译的中失败了这个可以根据报错信息在做一些小调整就可以了
- 导入idea
3. 验证是否编译成功
在项目中创建模块,
加入依赖
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile(project(":spring-context"))
}
创建两个类
@Service
public class UserServiceImpl {
public void sayHi(){
System.out.println("Hello Spring");
}
}
@Configuration
@ComponentScan("com.hs.spring.learn")
public class MainStat {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(MainStat.class);
UserServiceImpl bean = context.getBean(UserServiceImpl.class);
bean.sayHi();
}
}
运行main方法 如果能正常打印则说明构建成功了