目录

Spring源码构建

环境环境

安装Gradle

编译源码

spring中的依赖关系

spring中的版本号规则

语义化版本命名通行规则

Spring版本命名规则


Spring源码构建

环境环境

JDK1.8
IDEA
Gradle

Spring源码Github下载地址:
https://github.com/spring-projects/spring-framework/archive/v5.0.2.RELEASE.zip

由于Spirng5以后都是采用Gradle来编译,所以构建源码前需要先安装Gradle环境
Gradle:使用的是源码的build.gradle里的版本 4.3.1,下载链接:https://gradle.org/next-steps/?version=4.3.1&format=all

安装Gradle

下载后解压并配置环境变量即可

编译源码

1.切到 spring-framework-5.0.2.RELEASE 目录,运行gradlew.bat

看到下图就表示编译成功了

2.导入到IDEA

构建成功后就可以查看类图了

spring中的依赖关系

spring的结构图如下:

分为五个大模块:

核心容器
spring core,beans:
包含DI和IOC,BeanFactory 容器实例化后并不会自动实例化Bean,只有当Bean 被使用时 BeanFactory 容器才会对该 Bean 进行实例化与依赖关系的装配。
spring-context: 扩展了BeanFactory,添加了Bean生命周期控制等,ApplicationContext是该模块的核心接口,她的超类是BeanFactory。与BeanFactory 不同的是ApplicationContext容器实例化后会自动对所有的单实例Bean进行实例化与依赖关系的装配
spring-context-support: 对Spring IOC 容器的扩展支持。
spring-context-indexer: Spring的类管理组件和Classpath扫描
spring-expression: 统一表达式语言(EL)的扩展模块

AOP和设备支持
spring-aop: 
Spring 的另一个核心模块,是AOP 主要的实现模块
spring-aspects: 集成自AspectJ框架,主要是为Spring AOP提供多种AOP 实现方法。
spring-instrument: 基于JAVA SE中的"java.lang.instrument"设计的,应该算是AOP的一个支援模块

数据访问与集成
spring-jdbc:
Spring 提供的JDBC抽象框架的主要实现模块,用于简化SpringJDBC操作
spring-tx: Spring JDBC事务控制实现模块
spring-orm: ORM 框架支持模块, 集成 Hibernate, Java Persistence API (JPA)等
spring-oxm: 提供一个抽象层以支撑OXM(Object-to-XML-Mapping)
spring-jms:(JavaMessagingService)能够发送和接收信息

Web组件
spring-web:
为Spring提供最基础的Web支持,建立于核心容器之上,通过Servlet或者Listeners 来初始化IOC 容器。
spring-webmvc: Web-Servlet模块,实现了Spring MVC的Web应用。
spring-websocket: 主要是与Web客户端的全双工通讯的协议。
spring-webflux: 新的非堵塞函数式 Reactive Web 框架,可以用来建立异步的,非阻塞,事件驱动的服务。

通信报文
spring-messaging: 
为Spring 框架集成一些基础的报文传送应用。

集成测试
spring-test:
为测试提供支持

依赖图:

根据maven里的Jar包的依赖关系整理的:比方说spring-context就dependency于这些Jar

spring中的版本号规则

语义化版本命名通行规则

对版本的迭代顺序命名做了规范,其版本号的格式为 X.Y.Z(又称 Major.Minor.Patch),递增的规则为:

序号 格式要求 说明
X 非负整数 表示主版本号(Major),当 API 的兼容性变化时,X 需递增。
Y 非负整数 表示次版本号(Minor),当增加功能时(不影响 API 的兼容性),Y 需递增
Z 非负整数  表示修订号(Patch),当做 Bug 修复时(不影响 API 的兼容性),Z 需递增。

Spring版本命名规则

描述方式 说明 含义
Snapshot 快照版 尚不稳定、处于开发中的版本
Release 稳定版 功能相对稳定,可以对外发行,但有时间限制
GA 正式版 代表广泛可用的稳定版(General Availability)
M 里程碑版 (M 是 Milestone 的意思)具有一些全新的功能或是具有里程碑意义的版本。
RC 终测版 Release Candidate(最终测试),即将作为正式版发布。

spring源码构建以及模块划分和依赖相关推荐

  1. spring源码构建时缺失spring-cglib-repack.jar和spring-objenesis-repack.jar

    spring 源码构建时缺失 spring-cglib-repack.jar 和 spring-objenesis-repack.jar 问题发现及原因 在 IntelliJ IDEA 导入 Spri ...

  2. spring源码构建时缺失spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.4.jar

    今天在eclipse中构建spring的源码的时候,发现缺失了2个jar包.分别是:spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.4. ...

  3. spring源码构建时缺失spring-cglib-repack和spring-objenesis-repack的正确处理姿势

    今天开始阅读spring源码,当用idea构建了spring源码后,发现缺失spring-cglib-repack和spring-objenesis-repack这两个依赖. 在项目的build.gr ...

  4. 解决spring源码构建时缺失spring-cglib-repack和spring-objenesis-repack问题

    今天在看<Spring源码深度解析(第2版)>时,跟着作者的思路用IDEA搭建环境发现缺少spring-cglib-repack和spring-objenesis-repack这两个依赖, ...

  5. Spring 源码总结、IOC、循环依赖、AOP分析

    Spring 源码 本文基于 jdk 11 核心类 interface BeanFactory 该接口是访问 Spring bean 容器的根接口,是 bean 容器的基本客户端视图: 其他接口如Li ...

  6. spring源码构建

    spring构建心得 https://www.bilibili.com/video/BV1TP4y1M7EF/ build.gradle buildscript {repositories {mave ...

  7. spring源码解析(五) 循环依赖

    1.什么是循环依赖? Bean A → Bean B → Bean A 在A对象生命周期中注入B,进入B生命周期找A,但A还不存在,继续进入A对象生命周期找B,这就是循环依赖. 2.循环依赖造成的结果 ...

  8. Spring源码构建项目,导入eclipse后,缺失spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.4.jar的解决办法

    在导入ide之后,发现有 spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.4.jar不存在,在spring-framework目录下执行 ...

  9. Spring源码解析-三级缓存与循环依赖,nginx架构图

    两个流程理论上是互不影响的 protected <T> T doGetBean(String name, @Nullable Class<T> requiredType, @N ...

最新文章

  1. l2-22(重排链表)
  2. 判断一棵二叉树是否为搜索二叉树、完全二叉树、平衡二叉树(java)
  3. 爱摸鱼的Dillonh
  4. setdata改数组里的值 微信小程序_今日艰难笔记redux小程序随记
  5. 直播地址公布|第八届“数学、计算机与生命科学交叉研究” 青年学者论坛--特别云论坛...
  6. Drawing with GoogLeNet
  7. 解决github网站打开慢的问题
  8. /build/tools/caffe.bin工具简析
  9. 手机音频拼接软件_几款好用的修音软件,有需要的小伙伴快来下载吧
  10. 网卡配置里NM_CONTROLLED的意思
  11. Thinkphp5 php会员实现单点登录
  12. java农夫过河_C语言实现农夫过河代码及解析
  13. 《算法竞赛入门经典》Chap3
  14. JS—正则:手机号3+4+4空格格式化
  15. FasterRCNN目标检测算法
  16. 字符串处理【AC自动机】 - 原理 AC自动机详解
  17. Ardunio开发实例-线性电位计
  18. PTA----神坛 (30分)(计算几何)
  19. Ubuntu 几个常用的更新命令
  20. Python头像动漫化,快来生成一个自己的动漫头像吧,带你一步一步深入Handler源码

热门文章

  1. ThreadLocal以及增强
  2. 如何实现一个java窗口_如何实现多个弹出窗口?
  3. linux防火墙阻断目的,基于Linux防火墙的内部邮件监控与阻断系统
  4. JDK 是如何判断两个对象是否相同的?判断的流程是什么?
  5. 用户超5亿,三年投10亿,开发者如何抢滩支付宝小程序蓝海?
  6. 2017 JMP Discovery Summit China圆满落幕
  7. 利用Sqoop将MySQL海量测试数据导入HDFS和HBase
  8. Python 中的模块和包
  9. python sys.argv[]用法
  10. 【转载】进程间的通信之剪贴板方法实现源码