Spring 源码编绎

news2024/11/16 23:39:41

本示例基于 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的简写,意思是里程碑,代表着有重大改进的版本。

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();
    }

}
    • 正确输出,大功告成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/184543.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BM5 合并k个已排序的链表

目录 描述 示例1 示例2 思路: 代码: 描述 合并 k 个升序的链表并将结果作为一个升序的链表返回其头节点。 示例1 输入:[{1,2,3},{4,5,6,7}] 返回值:{1,2,3,4,5,6,7} 示例2 输入:[{1,2},{1,4,5},{6}] 返回值…

Linux常用命令——rmmod命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) rmmod 从运行的内核中移除指定的内核模块 补充说明 rmmod命令用于从当前运行的内核中移除指定的内核模块。执行rmmod指令,可删除不需要的模块。Linux操作系统的核心具有模块化的特性,应…

Elasticsearch(六)--ES文档的操作(中)---修改文档

一、前言 上篇文章我们了解了ES的插入和批量插入文档的操作,分别通过ES的kibana客户端以及Java高级Rest客户端进行学习,那么本篇则进入到对文档的修改操作,同新增文档,也有更新单条文档和批量更新文档操作,但还多出一…

Day873.普通索引唯一索引的选择 -MySQL实战

普通索引&唯一索引的选择 Hi,我是阿昌,今天学习记录的是关于普通索引&唯一索引的选择的内容。 假设你在维护一个市民系统,每个人都有一个唯一的身份证号,而且业务代码已经保证了不会写入两个重复的身份证号。 如果市民…

Java基础项目实战--大学生求职招聘信息网站系统

Java基础项目实战–大学生求职招聘信息网站系统 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系…

基于php的婚纱商城管理系统

摘要网络技术给生活带来了十分的便利。所以把婚纱商城管理系统与现在网络相结合。在婚纱商城发展的整个过程中,婚纱信息管理担负着最重要的角色。为满足如今日益复杂的管理需求,各类管理系统程序也在不断改进。本课题所设计的婚纱商城管理系统&#xff0…

自动驾驶介绍、应用、前景

自动驾驶介绍、应用、前景1 介绍1.1 定义1.2 作用1.3 发展历程1.4 分类23年初竞争格局1.5 顾虑1.6 前景2 产业链现状2.1 芯片2.2 仿真3 技术路线3.1 是否交互3.1.1 单车智能3.1.2 车路协同3.2 主传感器区分3.2.1 纯视觉3.2.2 混合传感器3.3 前装还是后装3.3.1 前装3.3.2 后装4 …

基于java SSM医药住院管理系统设计和实现

基于java SSM医药住院管理系统设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 …

宇隆光电冲刺上交所上市:毛利率持续下滑,收入极其依赖京东方

近日,重庆宇隆光电科技股份有限公司(下称“宇隆光电”)预披露招股书,准备在上海证券交易所主板上市。 本次冲刺上市,宇隆光电计划募资15亿元,其中7亿元用于OLED控制板及液晶模组控制板和精密模切生产基地项…

Spring Cloud_服务监控hystrixDashboard

目录一、概述二、仪表盘90011.新建Module2.POM3.YML4.主函数5.Provider微服务提供类都需要监控依赖配置6.启动仪表盘三、断路器演示1.修改cloud-provider-hystrix-payment80012.监控测试代码链接 https://github.com/lidonglin-bit/cloud 一、概述 除了隔离依赖服务的调用以外…

背景图片大小设置 解决背景图多张铺满盒子 背景图和背景颜色混用

目录更多的样式透明度鼠标样式:cursor盒子隐藏背景图和img元素的区别涉及的css属性1. background-image:url(“”)2. background-repeat3. background-size解决图片多张铺满盒子的问题4. background-position5. background-attachment6. 背景图和背景颜色混用7. 速写…

Jackson使用详细介绍

Jackson使用详细介绍一 . Jackson 介绍二. Jackson Maven 依赖三. ObjectMapper 对象映射器四. Jackson JSON 基本操作1. Jackson JSON 序列化2. Jackson JSON 反序列化3. JSON 转 List4. JSON 转 Map5. Jackson 忽略字段6. Jackson 日期格式化Date 类型LocalDateTime 类型时间…

动态内存分配

目录 一、内存使用方式 (一)一个c/c编译的程序占用的内存分为以下几个部分 二、malloc (一)malloc 1. 举例:malloc(4) 2. 如何理解malloc(size(Var_T)*N) 3. 举例 (二)静态、全局指针…

【数据结构与算法】队列-模拟实现队列以及设计循环队列

文章目录队列的概念链表实现栈设计循环队列总结队列的概念 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,…

图的搜索(DFS、BFS)

图的搜索(图的遍历)是指从图的任一顶点出发,访问图的所有顶点,且每个顶点只访问一次。 深度优先搜索 DFS概念: 深度优先搜索 (Depth-First Search,DFS)是从某个顶点v1出发对图进行搜素,每一步…

第八章 面向对象编程(中级)

一、访问修饰符(P279) 1. 基本介绍 java提供四种访问控制修饰符号,用于控制方法和属性(成员变量)的访问权限(范围): (1)公开级别:用 public 修饰…

2018-NIPS-owards Sparse Hierarchical Graph Classifiers

2018-NIPS-owards Sparse Hierarchical Graph Classifiers Paper: https://arxiv.org/abs/1811.01287 Code: 对稀疏分类分级图 作者提出以往的图分类方法中通常使用单个全局池化步骤来聚合节点特征或手动设计的固定启发式算法,这样做会丢失信息,所以将…

ABB机器人系统输入输出信号System Input和Output详解(二)

ABB机器人系统输入输出信号System Input和Output详解(二) 上一次和大家分享了系统输入信号System Input相关的内容,具体可参考以下链接中的内容: ABB机器人系统输入输出信号System Input和Output详解(一) 本次和大家分享系统输出信号的相关内容: System Output类型: 可…

数据挖掘,计算机网络、操作系统刷题笔记38

数据挖掘,计算机网络、操作系统刷题笔记38 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,orac…

91年的印度程序员开发博客网站每月已赚2500美元以及他的创业历程

他是谁 Sai Krishna ,程序员、美食家、电影爱好者。 目前正在开发和维护的superblog.ai的收入情况(截止2023年1月27日): 此前他是 SpotPlay 的联合创始人兼首席技术官。此外,他开发的应用程序和游戏的下载量已达数百…