Spring 源码编绎

本示例基于 spring-framework-5.2.22.RELEASE + GradleWapper + jdk1.8.0_131编译

# 环境准备

  • maven

  • jdk8+

  • idea

# 源码下载

  1. 进入https://github.com/spring-projects/spring-framework

Spring的源码是发布在github上面的

  1. 下载最新版发布版源码

不要太纠结版本区别,无需刻意保证跟老师一样的版本,只要5.x的正式发布(RELEASE)版本就行, 因为Spring中Ioc AOP核心分支是不会有变化的, 变的只有微小的细节。

M:

M1,M2,…中的M是milestone的简写,意思是里程碑,代表着有重大改进的版本。

扫描二维码关注公众号,回复: 17188318 查看本文章

git 地址()

 git clone --branch v5.2.22.RELEASE https://github.com/spring-projects/spring-framework.git

构建工具准备:

安装源码对应的gradle版本(也可不安装),建议使用gradleWraper中的gradle。

Gadle介绍:

Gradle是个构建系统,能够简化你的编译、打包、测试过程。熟悉Java的同学,可以把Gradle类比成Maven。
Gradle Wrapper的作用是简化Gradle本身的安装、部署。不同版本的项目可能需要不同版本的Gradle,手工部署的话比较麻烦,而且可能产生冲突,所以需要Gradle Wrapper帮你搞定这些事情。Gradle Wrapper是Gradle项目的一部分。

Gradle无需花时间去深入学习,因为我们在学习源码的过程不会过多涉及到gradle,当然有兴趣可以去学习, 相当于后起之秀,但是maven已经够优秀了,暂时应该也没有办法替代maven。

gradleWraper在该文件中有体现,相当于远程自动下载gradle到本地(所以你可以下载gradle,也可以不下,因为可以使用gradleWraper远程的统一版本):spring-framework-5.2.22.RELEASE\gradle\wrapper\gradle-wrapper.properties

所以如果你需要下载也最好下载该链接对应的gradle版本

spring-framework\gradle\wrapper\gradle-wrapper.properties

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

这个文件就相当于我们Maven的pom.xml 管理项目的依赖等信息...

根目录下gradle.properties

设置镜像

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" }
        }

按照官网的方式编译:

使用gradlew(gradle-wrapper命令) 先编译oxm:compileTest Java: Precompile spring-oxm with ./gradlew :spring-oxm:compileTestJava
    • 编译compileTestJava模块

打开源码所在文件夹,在windows cmd命令中输入,在windows中当前目录无需输入“./”。(也可能输入)

gradlew :spring-oxm:compileTestJava

配置了镜像很快(一两分钟)就能编译完成, 如果要很久说明你的镜像没起作用,如果编译异常请自行百度,每个人的电脑及环境产生的异常都有可能。

    • 导入项目到idea中

导入项目到idea中:Import into IntelliJ (File -> New -> Project from Existing Sources -> Navigate to directory -> Select build.gradle)

导入后等待编译,莫急,需要一点点时间,编译完成:

    • 添加测试模块代码:

添加测试代码:Code away

new->model->gradle-->输入模块名称

编写代码测试ioc功能

    • 添加依赖

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12' 
    compile(project(":spring-context"))     
}

compile(project(":spring-context")) 代表本项目的

    • 随意添加任意bean:

package org.springframework.bean;

import org.springframework.stereotype.Service;

@Service
public class TestServiceImpl {
    public void hello(){
        System.out.println("Hello Spring");
    }
}
    • 添加启动配置类:

package org.springframework.bean;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("org.springframework.bean")
public class MainTest {
    public static void main(String[] args) {
        ApplicationContext context=new AnnotationConfigApplicationContext(MainTest.class);
        TestServiceImpl bean = context.getBean(TestServiceImpl.class);
        bean.hello();
    }

}
    • 正确输出,大功告成

猜你喜欢

转载自blog.csdn.net/csl12919/article/details/128789567
今日推荐