spring-framework-5.1源码编译
1 前言
最近因为需要从零开始接触了spring的源码,最开始的时候是使用IDEA反编译的源码,但是因为是反编译的跟原本的源码确实存在区别,并且还不能写注释。工欲善其事,必先利其器。毅然决然,决定下载spring的源码下来阅读,测试。
2 曲折的搭建之旅
因为spring5的源码是使用gradle搭建的,但是作为一个只会用maven的人来说,最开始确实是很懵逼的。再加上网上相关的资料确实不多,所以确实走了一点弯路。
2.1 工具版本
JDK1.8.0_141、IDEA2018.3.2、Gradle为IDEA默认下载(4.10)
2.2 下载源码
首先进入github找到spring官方发布的spring-framework的项目,选择相应的版本,将相关源码Download Zip下来。然后解压,使用IDEA打开项目。项目结构如下(我的是编译后的,没有编译的没有build目录):
2.3 预编译
由于我电脑本地没有gradle,并且我也不想下载gradle,所以我把这件事全权交给了IDEA,它自动帮我下载了gradle,所以等待它下载完成,并且进行包的导入花了很长的时间。耐心等待哦。(我看网上在这一步导入的时候会出现一些错误,但是我的却没有,可能是IDEA自动下载的gradle的缘故吧)
2.3.1 踩过的坑
最开始的时候也注意到了网上提醒的预编译,但是出现了一点意外,我把spring-core忘记了,编译spring-oxm后,随后编译了spring-context,然后是spring-bean。然后很不幸的,发生了无法找到DefaultListableBeanFactory
类的情况,然后我就弄了很久很久很久很久…
最后实在是不知道怎么回事,决定推翻重来,一步步的,最后发现了预编译时,spring-core忘记编译了,真的是哭了o(╥﹏╥)o
2.3.2 具体编译操作
找到IDEA右边的grdle选项,按照spring-core、spring-oxm、spring-context、spring-bean的顺序依次执行下面的操作。
3 编写测试类
具体成不成,还是要测试一下塞,在项目上右键
,new一个新的module,注意是一个gradle项目
最后完成后,在build.gradle里加入依赖
compile(project(":spring-context"))
编写测试类
AppConfig
public class AppConfig {
public AppConfig() {
System.out.println("init");
}
}
Test
public class Test {
public static void main(String[] args) {
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
System.out.println(annotationConfigApplicationContext.getBean(AppConfig.class));
}
}
最后的结果
3.1 注意
可能上面的步骤完成后,运行测试类的时候会出现一个关于spring-instrument
的错误(无法找到)。这时你需要按照上面的步骤compileTestJava
一下。
然后在相应目录下的test目录下的java上右键,Run Tests in java
,然后再重新运行测试类就行了。