1.环境基本要求:
开发工具:IEDA202033
JDK:JDK11
编译工具:GRADLE
2.下载spring源码
git地址:https://github.com/spring-projects/spring-framework
使用压缩包zip的方式进行源码的下载,下载后解压文件
3.JDK安装,JDK一开始使用的是1.8.0202,导入spring源码后编译出现错误: 程序包jdk.jfr不存在 import jdk.jfr.Category;最后把jdk1.8卸载,装了jdk11;装jdk11的之前,先卸载jdk1.8,删除JAVA_HOME环境变量,Path中jdk的配置;再安装jdk11,默认一直下一步,安装成功后,配置JAVA_HOME环境变量;在控制台查看JDK11是否安装成功,使用命令java -version查看控制台
4.spring源码使用GRADLE编译的,所以需要安装gradle,地址:https://services.gradle.org/distributions/,我使用的最新版本,需要看文档可以下载docs.zip查看
下载后,解压到本地目录中
配置gradle环境变量,与配置maven基本一致,我的电脑-》属性-》高级-》环境变量-》新建变量名为GRADLE_HOME,变量值为刚才解压的gradle所在目录,配置完之后,在path中添加gradle的配置%GRADLE_HOME%\bin。配置完成之后,使用命令gradle -version,查看安装是否成功。
5.源码导入idea前的修改,找到spring-framework-master项目下的配置文件settings.gradle、build.gradle,修改依赖文件为阿里云镜像下载
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
settings.gradle修改位置,
pluginManagement {
repositories {
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
gradlePluginPortal()
maven { url 'https://repo.spring.io/plugins-release' }
}
}
build.gradle修改位置
repositories {
mavenLocal()
maven { url 'https://maven.aliyun.com/nexus/content/groups/public' }
maven { url "https://repo.spring.io/plugins-release" }
maven { url 'https://repo.spring.io/libs-snapshot' }
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
mavenCentral()
maven {
url "https://plugins.gradle.org/m2/"
}
}
6.ieda打开后编辑gradle配置信息,file->settings-》gradle;勾选jdk版本及gradle的安装位置
7.导入spring源码,file->new->project from existing sources,选中spring源码,然后选择Gradle方式导入
8.导入项目后,gradle会自动编译下载需要的jar包,此过程比较慢,需要耐心等待,若是没有触发gradle自动编译,可以从此处点击圆环,直到编译完成
9.编译完成后,我们开始往spring源码项目中添加测试的demo,new-》module->gradle->java,选择jdk11,下一步,填写下module的名字,自己命名即可,finish结束
10.此时spring源码项目中多了一个目录testspring,编译方式也是gradle,新建的项目需要引用spring-beans、spring-core等的文件,所以在新目录下的配置bulid.gradle中添加引用,重新点第8步中的圆环进行编译
testCompile group: 'junit', name: 'junit', version: '4.12'
compile(project(":spring-beans"))
compile(project(":spring-context"))
compile(project(":spring-core"))
compile(project(":spring-expression"))
11.第一个demo建立,创建一个实体Person,一个配置xml,一个测试入库程序类,包结构截图
Person实体代码
public class Person {
private String name;
private int age;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
xml配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="Person" id="person">
<property name="name" value="johnny"/>
<property name="age" value="10"/>
</bean>
</beans>
测试主函数
import org.springframework.beans.BeansException;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Demo1 {
public static void main(String[] args) throws Exception{
ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("demo.xml");
Person person = classPathXmlApplicationContext.getBean(Person.class);
System.out.println(person);
}
}
12.到测试即可断点跟程序,在源码上进行注释的书写了,开启spring源码阅读之旅吧