spring源码构建以及模块划分和依赖
目录
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源码构建以及模块划分和依赖相关推荐
- spring源码构建时缺失spring-cglib-repack.jar和spring-objenesis-repack.jar
spring 源码构建时缺失 spring-cglib-repack.jar 和 spring-objenesis-repack.jar 问题发现及原因 在 IntelliJ IDEA 导入 Spri ...
- 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. ...
- spring源码构建时缺失spring-cglib-repack和spring-objenesis-repack的正确处理姿势
今天开始阅读spring源码,当用idea构建了spring源码后,发现缺失spring-cglib-repack和spring-objenesis-repack这两个依赖. 在项目的build.gr ...
- 解决spring源码构建时缺失spring-cglib-repack和spring-objenesis-repack问题
今天在看<Spring源码深度解析(第2版)>时,跟着作者的思路用IDEA搭建环境发现缺少spring-cglib-repack和spring-objenesis-repack这两个依赖, ...
- Spring 源码总结、IOC、循环依赖、AOP分析
Spring 源码 本文基于 jdk 11 核心类 interface BeanFactory 该接口是访问 Spring bean 容器的根接口,是 bean 容器的基本客户端视图: 其他接口如Li ...
- spring源码构建
spring构建心得 https://www.bilibili.com/video/BV1TP4y1M7EF/ build.gradle buildscript {repositories {mave ...
- spring源码解析(五) 循环依赖
1.什么是循环依赖? Bean A → Bean B → Bean A 在A对象生命周期中注入B,进入B生命周期找A,但A还不存在,继续进入A对象生命周期找B,这就是循环依赖. 2.循环依赖造成的结果 ...
- 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目录下执行 ...
- Spring源码解析-三级缓存与循环依赖,nginx架构图
两个流程理论上是互不影响的 protected <T> T doGetBean(String name, @Nullable Class<T> requiredType, @N ...
最新文章
- l2-22(重排链表)
- 判断一棵二叉树是否为搜索二叉树、完全二叉树、平衡二叉树(java)
- 爱摸鱼的Dillonh
- setdata改数组里的值 微信小程序_今日艰难笔记redux小程序随记
- 直播地址公布|第八届“数学、计算机与生命科学交叉研究” 青年学者论坛--特别云论坛...
- Drawing with GoogLeNet
- 解决github网站打开慢的问题
- /build/tools/caffe.bin工具简析
- 手机音频拼接软件_几款好用的修音软件,有需要的小伙伴快来下载吧
- 网卡配置里NM_CONTROLLED的意思
- Thinkphp5 php会员实现单点登录
- java农夫过河_C语言实现农夫过河代码及解析
- 《算法竞赛入门经典》Chap3
- JS—正则:手机号3+4+4空格格式化
- FasterRCNN目标检测算法
- 字符串处理【AC自动机】 - 原理 AC自动机详解
- Ardunio开发实例-线性电位计
- PTA----神坛 (30分)(计算几何)
- Ubuntu 几个常用的更新命令
- Python头像动漫化,快来生成一个自己的动漫头像吧,带你一步一步深入Handler源码