Spring5源码系列--源码编译

简介: Spring5源码系列--源码编译

一. 准备工作


1. . 编译环境

  • maven
  • jdk8
  • idea

2. 编译版本:

  SpringV5.2.7RELEASE+GradleWapper+jdk1.8.0_131编译

 

二. 源码下载



  git地址: 进入https://github.com/spring-projects/spring-framework

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

  注: 需要连接FQ软件才行, 不然git特别慢

1187916-20200918121755159-829285038.png

1187916-20200918121703875-477759403.png

版本号介绍

1187916-20200918121831091-1792760661.png

M:

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

三. 构建工作准备



安装源码有两种方式:


第一种: 下载spring使用的对应的Gradle版本,安装

第二种: 使用自带的gradleWrapper.

备注: 我在导入项目到idea的时候, 不能够选择使用的gradle编译类型(使用系统的gradle还是gradleWrapper), 所以, 我是自己安装了Gradle, 然后编译的.

 

查看spring源码中gradle的版本. 下载对应版本的gradle.

在gradle-wrapper.properties中查看版本号

1187916-20200918122417922-1470555057.png


我们看看到spring5.2.7.RELEASE对应的gradle版本是5.6.4-bin.zip. 我们下载这个文件.

网盘链接: https://pan.baidu.com/s/1NduYeCVYJxDbd4YX1XcIEw  密码: dqcq

 

如果使用方法二, gradleWrapper会自动下载, 这是官方推荐的方式. window平台的idea可以选择使用gradleWrapper的方式.

 

四. 编译Spring源码项目



1. 修改build.gradle


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

设置镜像
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" }
        }

2. 编译compileTestJava模块


进入到源码所在文件夹, 执行一下命令. 我的是mac本, 所以需要加./, 如果是windows本就不需要加

./gradlew :spring-oxm:compileTestJava

配置了镜像很快(一两分钟)就能编译完成, 如果要很久说明你的镜像没起作用

 

3. 导入项目到idea中, 进行编译


我这里导入代码, 自动就会进行编译了. 不需要额外的操作. 这个和idea的版本有关,我的idea是2020.1的

1187916-20200918123444870-184187723.png

最后提示finished就ok了.

 

五. 测试源码编译是否成功



1. 添加测试模块代码


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

1187916-20200918123731926-1655902034.png

1187916-20200918123816996-186626445.png


设置项目名, 设置好以后点击finish

 

2. 添加测试文件, 测试IoC功能


  • 为项目添加依赖
dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12' 
    compile(project(":spring-context"))     
}

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

  • 随意添加一个bean


package com.lxl.www;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl {
    public void sayHi(){
        System.out.println("Hello Spring!");
    }
}
  • 添加启动类
import cn.tulingxueyuan.beans.UserServiceImpl;
import javafx.application.Application;
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("com.lxl.www")
public class MainStat {
    public static void main(String[] args) {
        ApplicationContext context=new AnnotationConfigApplicationContext(MainStat.class);
        UserServiceImpl bean = context.getBean(UserServiceImpl.class);
        bean.sayHi();
    }
}
  • 启动MainStat并运行. 如果看到如下输出, 表示成功了

1187916-20200918124230959-71024434.png


代码依然会报错, 是一个git的异常, 这个可以忽略. 看到上面编译成功,并且有打印结果, 就说明成功了.

相关文章
|
6月前
|
设计模式 Java 开发者
如何快速上手【Spring AOP】?从动态代理到源码剖析(下篇)
Spring AOP的实现本质上依赖于代理模式这一经典设计模式。代理模式通过引入代理对象作为目标对象的中间层,实现了对目标对象访问的控制与增强,其核心价值在于解耦核心业务逻辑与横切关注点。在框架设计中,这种模式广泛用于实现功能扩展(如远程调用、延迟加载)、行为拦截(如权限校验、异常处理)等场景,为系统提供了更高的灵活性和可维护性。
|
10月前
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
598 70
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
438 2
|
11月前
|
存储 监控 数据可视化
SaaS云计算技术的智慧工地源码,基于Java+Spring Cloud框架开发
智慧工地源码基于微服务+Java+Spring Cloud +UniApp +MySql架构,利用传感器、监控摄像头、AI、大数据等技术,实现施工现场的实时监测、数据分析与智能决策。平台涵盖人员、车辆、视频监控、施工质量、设备、环境和能耗管理七大维度,提供可视化管理、智能化报警、移动智能办公及分布计算存储等功能,全面提升工地的安全性、效率和质量。
295 0
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
500 7
|
存储 缓存 Java
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
328 2
|
存储 开发框架 Java
什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
文章详细介绍了Spring、IOC、DI的概念和关系,解释了控制反转(IOC)和依赖注入(DI)的原理,并提供了IOC的代码示例,阐述了Spring框架作为IOC容器的应用。
1035 1
什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
389 9
|
Java Spring
Spring底层架构源码解析(三)
Spring底层架构源码解析(三)
591 5

热门文章

最新文章