1. Spring不仅只是一个框架,已然成为一种生态
1.1 一切从Bean
[外链图片转存失败(img-Y0nSM0J4-1566808061353)(evernotecid://DE37D598-33A4-4708-800A-6D4CF841DDE2/wwwevernotecom/149352153/ENResource/p281)]
1.2 简化开发
Spring简化开发四个基本策略
- 基于POJO的轻量级和最小侵入性编程
- 通过依赖注入和面向接口松耦合
- 基于切面和惯性进行声明式编程
- 通过切面和模板减少样版式代码
1.3 AOP,DI,IOC之间的关系
[外链图片转存失败(img-bFhKfS68-1566808061354)(evernotecid://DE37D598-33A4-4708-800A-6D4CF841DDE2/wwwevernotecom/149352153/ENResource/p282)]
2. Spring5模块结构
[外链图片转存失败(img-nOAiBvWT-1566808061355)(evernotecid://DE37D598-33A4-4708-800A-6D4CF841DDE2/wwwevernotecom/149352153/ENResource/p283)]
2.1 Spring的核心模块
模块名称 |
主要功能 |
spring-core |
依赖注入IOC与DI的最基本实现 |
spring-bean |
Bean工厂与Bean的装配 |
spring-context |
定义基础的spring的context上下文即IOC容器 |
spring-context-support |
对Spring IOC容器的扩展支持,以及IOC子容器 |
spring-context-indexer |
Spring的类管理组件和classpath扫描 |
spring-expression |
spring表达式语言 |
2.2 Spring的切面编程
模块名称 |
主要功能 |
spring-aop |
面向切面编程的应用模块,整合Asm,CGLib,JDKProxy |
spring-aspects |
集成AspectJ, AOP应用框架 |
spring-instrument |
动态Class Loading模块 |
2.3 Spring的数据访问与集成
模块名称 |
主要功能 |
spring-jdbc |
Spring提供的JDBC抽象框架的主要实现模块,用于简化Spring JDBC操作 |
spring-tx |
Spring JDBC事务控制实现模块 |
spring-orm |
主要集成Hibernate,Java Persistence API(JPA),Java Data Object(IDO) |
spring-oxm |
Java对象映射成XML数据,或者将XML数据映射成Java对象 |
spring-jms |
Java Messaging Service能够发送和接收消息 |
2.4 Spring的Web组件
模块名称 |
主要功能 |
spring-web |
提供最基础的Web支持,主要建立于核心容器之上,通过Servlet或者Listeners来初始化IOC容器 |
spring-webmvc |
实现了Spring MVC(Model-View-Controller)的Web应用 |
spring-websocket |
主要是与Web前端的全双工通讯的协议 |
spring-webflux |
一个新的非阻塞函数式Reactive Web框架,可以用来建立异步的,非阻塞,事件驱动的服务 |
2.5 Spring的通信报文
模块名称 |
主要功能 |
spring-messaging |
从Spring4开始新加入的一个模块,主要职责是为Spring框架集成一些基础的报文传送应用 |
2.6 Spring的集成测试
模块名称 |
主要功能 |
spring-test |
主要为测试提供支持 |
2.7 Spring的集成兼容
模块名称 |
主要功能 |
spring-framework-bom |
Bill Of Materials解决Spring不同模块依赖版本不同问题 |
2.8 Spring各模块之间的依赖关系
[外链图片转存失败(img-1mHBnVsQ-1566808061356)(evernotecid://DE37D598-33A4-4708-800A-6D4CF841DDE2/wwwevernotecom/149352153/ENResource/p284)]
[外链图片转存失败(img-uVJ3t2u1-1566808061357)(evernotecid://DE37D598-33A4-4708-800A-6D4CF841DDE2/wwwevernotecom/149352153/ENResource/p285)]
3. Spring版本命名规则
3.1 常见的软件版本命名规则
软件 |
升级过程 |
说明 |
Linux Kernel |
0.0.1,1.0.0,2.1.0,3.0.18 |
遵循X.Y.Z规则命名版本,Y位若为偶数则表示稳定版本,奇数表示开发版本 |
Windows |
Windows98, Windows2000,Windows xp, Windows 7, Windows 10 |
没有确定的命名规则,比较随意 |
3.2 语义化版本命名通行规则
序号 |
格式要求 |
说明 |
X |
非负整数 |
表示主版本号(Major),当API的兼容性变化时,X需要递增 |
Y |
非负整数 |
表示次版本号(Minor),当增加功能时(不影响API的兼容性),Y需递增 |
Z |
非负整数 |
表示修订号(Patch),当做Bug修复时(不影响API的兼容性),Z需递增 |
3.3 商业软件中常见的修饰词
描述方式 |
说明 |
含义 |
Snapshot |
快招版 |
尚不稳定,尚处于开发中的版本 |
Alpha |
内部版 |
严重缺陷基本完成修正并通过复测,但需要完整的功能测试 |
Beta |
测试版 |
相对于Alpha有很大的改进,消除了严重的错误,但还是存在一些缺陷 |
RC |
终测版 |
Release Candidate(最终测试),即将作为正式版发布 |
Demo |
演示版 |
只集成了正式版部分功能升级,无法升级 |
SP |
SP1 |
Service Pack表示升级包,在windows中见过 |
Release |
稳定版 |
功能相对稳定,可以对外发布,但有时间限制 |
Trial |
试用版 |
试用版仅对部分用户发行 |
Full Version |
完整版 |
即正式版,已发布 |
Unregistered |
未注册 |
有功能或时间限制的版本 |
Standard |
标准版 |
能满足正常使用的功能的版本 |
Lite |
精简版 |
只含有正式版的核心功能 |
Enhance |
增强版 |
正式版,功能优化的版本 |
Ultimate |
旗舰版 |
在标配版本升级体验更好的版本 |
Professiona |
专业版 |
针对更高要求功能,专业性更强的使用群体发行的版本 |
Free |
自由版 |
自由免费使用的版本 |
Upgrade |
升级版 |
有功能增强或修复已知bug |
Retail |
零售版 |
单独发售 |
Cardware |
共享版 |
公用许可证(IOS签名) |
LTS |
维护版 |
该版本需要长期维护 |
3.4 Spring版本命名规则
描述方式 |
说明 |
含义 |
Snapshot |
快招版 |
尚不稳定,尚处于开发中的版本 |
Release |
稳定版 |
功能相对稳定,可以对外发布,但有时间限制 |
GA |
正式版 |
代表广泛可用的稳定版(General Availability) |
M |
里程碑版 |
Milestone具有一些全新的功能或是具有里程碑意义的版本 |
RC |
终测版 |
Release Candidate(最终测试),即将作为正式版发布 |
4. 构建Spring5源码
4.1 环境准备
- Spring Framework版本5.19
- JDK版本 JDK 8 update 20 or later
- Gradle版本5.6
4.2 构建过程
下载代码
git clone git@github.com:spring-projects/spring-framework.git
cd spring-framework
命令构建
./gradlew build
当显示Build Success就说明Spring Framework构建完成