Spring框架的前世今生已及源码构建

本篇学习目标:

  • 通过对本篇内容的学习,可以掌握Spring的基本架构及各子模块之间的依赖关系。
  • 了解Spring的发展历史,启发思维。
  • 对Spring形成一个整体的认识,为之后的深入学习做铺垫。
  • 了解Spring版本升级的规律,从而应用到自己的系统升级版本命名。
  • 采用Gradle构建Spring5源码。

本篇内容定位:

Spring使用经验1-5年,希望深入了解Spring源码的人群。

一切从Bean开始:

Java Bean (Java Bean是由Applet Bean演变而来)   ===>  EJB(Enterprise Java Beans) ===> POJO (Plain Ordinary Java Object,简单的JavaBean)

Spring能够给我带来什么?

简化开发

Spring简化开发四个基本策略

  • 基于POJO的轻量级和最小侵入性编程,POJO与POJO之间最小依赖。
  • 通过依赖注入和面向接口松耦合。
  • 基于切面和惯性进行声明式编程。
  • 通过切面和模板减少样板式代码。

 AOP、IOC、DI之间的依赖关系

DI   ===>依赖于  IOC    AOP ===>依赖于  IOC

建议看完这篇博客的Spring编程思想总结模块再来 地址:各设计模式总结与对比及Spring编程思想

Spring5模块结构图:

Spring之核心模块:

模块名称 主要功能
spring-core 依赖注入IOC与DI的最基本实现
spring-beans Bean工厂与Bean的装配
spring-context 定义基础的Spring的Context上下文即IOC容器
spring-context-support 对Spring IOC容器的扩展支持,以及IOC子容器
spring-context-indexer Spring的类管理组件和Classpath扫描
spring-expression Spring表达式语言

Spring之切面编程:

模块名称 主要功能
spring-aop 面向切面编程的应用模块,整合Asm,CGLib,JDKProxy
spring-aspects 集成AspectJ(AOP应用框架)
spring-instrument 动态Class Loading模块

Spring之数据访问与集成:

模块名称 主要功能
spring-jdbc Spring提供的JDBC抽象框架的主要实现模块,用于简化Spring JDBC操作
spring-tx Spring JDBC事务控制实现模块
spring-orm 主要集成Hibernate,Java Persistence API(JPA)和Java Data Objects(JDO)
spring-oxm 将Java对象映射成XML数据,或者将XML数据映射成Java对象
spring-jms Java Messaging Service能够发送和接收信息

Spring之Web组件:

模块名称 主要功能
spring-web 提供了最基础的Web支持,主要建立于核心容器之上,通过Servlet或者Listener来初始化IOC容器
spring-webmvc 实现了Spring MVC(model-view-controller)的Web应用
spring-websocket 主要是与Web前端的全双工通讯的协议
spring-webflux 一个新的非堵塞函数式Reactive Web框架,可以用来建立异步的,非阻塞,事件驱动的服务(基于Servlet3.0才能使用)

Spring之通信报文:

模块名称 主要功能
spring-messaging 从Spring4开始新加入的一个模块,主要职责是为Spring框架集成一些基础的报文传送应用

Spring之集成测试:

模块名称 主要功能
spring-test 主要为测试提供支持的

Spring之集成兼容:

模块名称 主要功能
spring-framework-bom Bill of Materials 解决Spring不同模块依赖版本不同问题

Spring各模块之间的依赖关系:

 

常见的软件版本命名规则

软件 升级过程 说明
Linux Kernel 0.0.1  1.0.0  2.6.32  3.0.18 ... 若用X.Y.Z表示,则偶数Y表示稳定版本,奇数Y表示开发版本
Windows Windows 98 Windows 2000 Windows XP Windows 7 最大的特点是杂乱无章,毫无规律。
SSH Client 0.9.8  
OpenStack 2014.1.3   2015.1.1.dev8  

 

语义化版本命名通行规则

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

 

商业软件中常见的修饰词

描述方式 说明 含义
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 维护版 该版本需要长期维护

 

Spring版本命名规则

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

 

Spring5源码构建教程

源码下载:spring-framework-5.0.2.RELEASE中文注释版地址

下载完成后,查看build.gradle文件,查看对应的gradle版本(gradleVersion = '4.3.1')

 下载gradle:地址  选择对应的版本

配置环境变量:

 

 

 配置下载jar位置(默认在用户目录下.gradle)

 测试配置成功:

 构建项目:

由于integration-0.9.15.jar已经不在仓库了,需要修改build.gradle文件

1  将id "org.jetbrains.dokka" version "0.9.15" 修改为id "org.jetbrains.dokka" version "0.9.17"

2  repositories中添加maven { url "https://plugins.gradle.org/m2/" },问题解决了,可以下载新版本的jar

 

 

 在指定工程文件夹下运行命令:

在spring项目中找到import-into-idea.md文件,打开后跟着step操作。

 

导入步骤

idea版本:IntelliJ IDEA 2020.1
导入(其他低版本选择import导入)

这里第一次导入时可能需要手动停止,然后去设置这个idea的gradle本地仓库,不然又直接下载到c盘去了,顶不住😮,还有本地的gradle,不然idea要自己去下载了🐷

成功的话可以看到下图啦

接着连按两次shift键,找到ApplicationContext类,并按ctrl+shift+alt+u,看到下图也表示成功啦😋

 

 

posted @ 2021-01-29 10:11  IT学无止境99  阅读(121)  评论(0编辑  收藏  举报