Spring 源码环境搭建

Spring 源码环境搭建

Spring 源码环境搭建

Spring 是面向 Bean 的编程,Bean 在其中起到了巨大的作用,而 Spring 提供了 IOC 容器来管理对象之间的依赖关系,使我们可以更加关注业务,轻松的构建一个企业应用。借助 IOC 特性和 AOP 面向切面编程,可以说 Spring 为开发者提供了无限的可能,接下来我们一步步来揭穿其中的原理,就先从搭建源码开始吧!

1. 环境

  • Gradle-5.6.4
  • JDK-1.8
  • IntelliJ IDEA 2022.3.2
  • Spring-5.2.9RELEASE
  • Windows 10

2. 构建工具 Gradle

通过官网的源码仓库我们可以知道,Spring 官方构建工具是 Gradle,所以我们构建源码之前需要准备好 Gradle 环境。

2.1 Gradle 下载

Gradle 下载地址 :https://gradle.org/releases/
选择 5.6.4 下载到本地(尽量使用一致的版本,避免编译失败部分组件无法下载)。

2.2 Gradle 配置

  • 配置 GRADLE_HOME:
  • 配置 Path:

2.3 Gradle 验证

执行 gradle -v 查看安装情况:

出现上图的输出信息,说明我们的环境准备就绪!

2.4 Gradle 仓库

Gradle 仓库一般都是国外的镜像,为了加速我们的构建,我们将配置阿里镜像仓库进行加速。

  • 在 Gradle 安装目录中的 init.d 文件夹下新建 init.gradle 文件,配置阿里云加速器:
allprojects {
    repositories {
        maven { url "https://maven.aliyun.com/repository/central"}
        maven { url "https://maven.aliyun.com/repository/jcenter"}
        maven { url "https://maven.aliyun.com/repository/public"}
        maven { url "https://maven.aliyun.com/repository/google"}
        maven { url "https://maven.aliyun.com/repository/gradle-plugin"}
        maven { url "https://maven.aliyun.com/repository/grails-core"}
        maven { url "https://maven.aliyun.com/repository/spring"}
        maven { url "https://maven.aliyun.com/repository/spring-plugin"}
        maven { url "https://maven.aliyun.com/repository/apache-snapshots"}
        mavenCentral()
    }
}

3. 下载源码

本地我们搭建的环境选择的源码是 Spring-5.2.9RELEASE 版本,尽量和我保持一致,避免出现其他的编译问题。

3.1 Clone 代码

spring-framework 仓库地址:https://github.com/spring-projects/spring-framework
通过 git 命令将代码拉下来:

# clone 代码
git clone https://github.com/spring-projects/spring-framework.git

# 切 tag
git checkout Spring-5.2.9RELEASE -b Spring-5.2.9RELEASE

通过上的命令我们首先将代码拉到本地,然后通过 git checkout 命令切换到指定的 tag 上,并且新建本地 Spring-5.2.9RELEASE 分支方便我们后续进行分支操作。

3.2 编译代码

spring-framework源码目录中打开 cmd 命令行,执行 .gradlew.bat 命令进行构建,该过程会持续一段时间,我们不妨去歇下来稍事等待。

出现 BUILD SUCCESSFUL 表示我们编译过程结束了,接下来就可以导入到 IDEA 中。
PS:
a. 我已经执行过一次编译,所以我的时间是非常快的。
b. 若果编译过程中出现了相关问题,需要根据报错的信息进行排查。

4. 导入 IDEA

使用 IDEA 打开编译好的项目,需要提前配置好 IDEA 的 Gradle 以及 JDK 版本,接下来等待 IDEA build 完成即可:


当出现如下信息时,说明 IDEA 导入构建完成:

那么接下来,我们就可以开始编写模块开始验证了。

5. 构建测试模块

为了阅读源码,我们需要自己建立一个模块用来测试实例以及调试源码。

5.1 新建 Module

选择 Gradle 构建工具进行项目创建,完成后整体结构如下:


5.2 引入依赖

build.gradle 中共引入依赖,便于后续的测试:

plugins {
    id "java"
}

group "org.springframework"
version "5.2.9.RELEASE"

repositories {
    mavenCentral()
}

dependencies {
    testImplementation "org.junit.jupiter:junit-jupiter-api:5.8.1"
    testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.8.1"
    testCompile group: "junit", name: "junit", version: "4.10"
    compile(project(":spring-context"))
}

test {
    useJUnitPlatform()
}

5.3 编写代码

新建一个类用于测试(加载到 IOC 容器中):

public class MyTestBean {

	private String testStr = "testStr";

	public String getTestStr() {
		return testStr;
	}
	
	public void setTestStr(String testStr) {
		this.testStr = testStr;
	}
}

在 resources 目录下新建 BeanFactoryTest.xml 文件,配置 bean 定义:

<?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 id="myTestBean" class="com.tian.MyTestBean"/>
</beans>

test 文件夹中通过 junit 进行测试:

public class BeanFactoryTests {

	/**
	 * 手动加载 xml 获取 bean
	 */
	@Test
	public void simpleLoadTest() {
		// 基于xml加载并注册Bean的流程
		BeanFactory bf = new XmlBeanFactory(new ClassPathResource("BeanFactoryTest.xml"));
		MyTestBean myTestBean = (MyTestBean) bf.getBean("myTestBean");
		Assert.assertEquals("testStr", myTestBean.getTestStr());
	}

	@Test
	public void testClassPathXmlApplication() {
		// 基于 xml 加载并注册 Bean 的流程
		ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:BeanFactoryTest.xml");
		MyTestBean myTestBean = (MyTestBean) applicationContext.getBean("myTestBean");
		Assert.assertEquals("testStr", myTestBean.getTestStr());
	}
}

运行上述的其中一个测试方法,如下图没有错误即表示我们的环境搭建完成:

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » Spring 源码环境搭建