Spring全家桶介绍
本文用于本人技术学习和备忘。水平有限,如有错漏欢迎指正!
原创不易,如有转载请标注出处:https://blog.csdn.net/luyou0401/article/details/153249372
Spring全家桶介绍
- Spring全家桶版本关系
- Spring Framework
- 版本特点
- Spring Framework 1.x - 奠基时代 (2004-2006)
- Spring Framework 2.x - XML配置的巅峰 (2006-2009)
- Spring Framework 3.x - 全面拥抱注解 (2009-2013)
- Spring Framework 4.x - Java 8与现代应用 (2013-2017)
- Spring Framework 5.x - 反应式革命 (2017-2022)
- Spring Framework 6.x - 面向未来 (2022-至今)
- Spring Boot
- 版本变更
- Spring Boot 1.x:经典的起点
- Spring Boot 2.x:现代化的演进
- 🚀 Spring Boot 3.x:面向未来的飞跃
- 选型建议
- 新项目启动
- 现有项目升级
- 微服务场景
- Spring Cloud
- Spring Cloud Alibaba
- Spring Cloud Alibaba 与 Spring Cloud 的关系
- 版本特点与演进详解
- 核心组件功能
Spring全家桶版本关系
框架与组件版本对应关系一览:
Spring Boot 版本 | JDK 要求 | Spring Framework | Spring Cloud | Spring Cloud Alibaba | Servlet 容器 | 其他关键组件 (示例) |
---|---|---|---|---|---|---|
3.2.x | 17 - 21 | 6.0.x | 2022.x / 2023.x | 2023.0.x | Tomcat 10.1.x | MyBatis-Plus ≥3.5.3.1 |
3.1.x | 17 - 20 | 6.0.x | 2022.x | 2022.0.0.0 | Tomcat 10.1.x | MyBatis-Plus ≥3.5.3.1 |
3.0.x | 17 - 19 | 6.0.x | 2022.0.x | 2022.0.0.0 | Tomcat 10.1.x | MyBatis-Plus ≥3.5.3.1 |
2.7.x | 8 - 19 | 5.3.x | 2021.x | 2021.x | Tomcat 9.0.x | MyBatis-Plus 3.4.x |
2.6.x | 8 - 18 | 5.3.x | 2021.x | - | Tomcat 9.0.x | - |
2.5.x | 8 - 16 | 5.3.x | 2020.x | - | Tomcat 9.0.x | - |
2.4.x | 8 - 11 | - | 2020.0.x | 2.2.x | - | - |
2.3.x | 8 - 11 | - | Hoxton | 2.2.x | - | - |
2.2.x | 8 | - | Hoxton | - | - | - |
2.1.x | 8 | - | Greenwich | 2.1.x | - | - |
2.0.x | 8 | - | Finchley | - | - | - |
1.5.x | 7 | - | Dalston/Edgware | - | - | - |
Spring Cloud 的版本命名
Spring Cloud 没有采用传统的数字版本号,而是使用开发代号(如 Greenwich, Hoxton)。但从 Spring Cloud 2020.0.x 开始,版本命名规则改为使用日历化版本号(如 2021.0.0),更易于理解和排序。
官方网址:
项目名称 | 官方网址 | 主要资源 |
---|---|---|
Spring | https://spring.io/projects/spring-framework | 这是整个Spring生态的主站,您可以在这里找到所有Spring项目(包括Spring Framework, Spring Boot等)的文档、教程、指南和下载信息 。 |
Spring Cloud | https://spring.io/projects/spring-cloud | 这是Spring Cloud的专属项目页面。在此您可以查看发布信息、版本详情,并获取官方文档 。 |
Spring Cloud Alibaba | https://sca.aliyun.com | 这是Spring Cloud Alibaba的官网,提供了详细的中文文档、学习资源、用户指南以及无疑答疑服务 。 |
Spring Framework
我们来详细梳理一下 Spring Framework
各主要版本的特点和演进历程。Spring Framework
是整个 Spring
生态的基石,它的每次重大升级都带来了新的编程范式和技术能力。
下图清晰地展示了Spring Framework各主要版本的演进历程及其核心特性:
版本特点
Spring Framework 1.x - 奠基时代 (2004-2006)
- 核心特性:
- 轻量级依赖注入容器: 通过
XML
配置管理Java
对象及其依赖关系,颠覆了传统的硬编码模式。 - 面向切面编程: 提供了声明式事务管理等
AOP
能力,将横切关注点与业务逻辑分离。 - 模板化封装: 引入了
JdbcTemplate
、HibernateTemplate
等,极大地简化了JDBC
等繁琐的API
操作。
- 轻量级依赖注入容器: 通过
- 历史意义:
- 奠定了
Spring
的核心思想——“通过依赖注入实现控制反转”,为企业级Java
开发提供了一种更优雅、更松耦合的解决方案。
- 奠定了
Spring Framework 2.x - XML配置的巅峰 (2006-2009)
- 核心特性:
XML
命名空间支持: 引入了context
、aop
、tx
等命名空间,使XML
配置更加简洁、可读。- 注解支持的开端: 开始了向注解配置的过渡,支持
@Autowired
、@Qualifier
等核心注解。 AspectJ
集成: 提供了更强大的AOP
支持。
- 历史意义:
- 将
XML
配置的优势发挥到极致,同时开启了从XML
向注解配置的转型。
- 将
Spring Framework 3.x - 全面拥抱注解 (2009-2013)
- 核心特性:
Java-based Configuration
: 引入了@Configuration
和@Bean
注解,允许开发者几乎完全使用Java
代码来配置应用,这是革命性的进步。- 表达式语言: 引入了强大的
Spring Expression Language
。 - 全面的注解支持: 彻底淘汰了
@Deprecated
的注解,并新增了@PropertySource
、@EventListener
等。
- 历史意义:
- 基本完成了从
XML
到Java
代码配置的范式转移,奠定了现代Spring
应用的配置基础。
- 基本完成了从
Spring Framework 4.x - Java 8与现代应用 (2013-2017)
- 核心特性:
- 全面支持
Java 8
: 支持lambda
表达式、方法引用、新的时间API
等。 - 条件化配置: 引入了
@Conditional
注解,这是Spring Boot
自动配置 的基石。 - 泛型依赖注入: 支持在注入时使用泛型信息。
- 反应式编程的先驱: 开始引入
Reactor
等反应式编程模型的初步支持。
- 全面支持
- 历史意义:
- 为
Spring Boot
的爆发打下了坚实的技术基础,并开始应对现代应用对异步和非阻塞的需求。
- 为
Spring Framework 5.x - 反应式革命 (2017-2022)
- 核心特性:
- 反应式栈: 引入了
Spring WebFlux
,一个全新的、非阻塞的、异步的Web
框架,用于替代传统的Servlet
栈,支持高并发场景。 - 函数式
Web
框架: 提供了轻量级的函数式编程模型来定义端点。 - 对
Kotlin
的全面支持: 将Kotlin
提升为与Java
并列的一等公民语言。 - 模块化: 代码库被拆分为多个独立的
JAR
,提升了灵活性。
- 反应式栈: 引入了
- 历史意义:
- 这是
Spring
在架构上的一次重大范式扩展,从传统的命令式、同步阻塞模型,正式迈入了反应式、异步非阻塞的领域。
- 这是
Spring Framework 6.x - 面向未来 (2022-至今)
- 核心特性:
- 基于
Jakarta EE 9+
: 这是一个破坏性变更。将所有javax.*
包名迁移至jakarta.*
,为利用最新的Jakarta EE
特性(如Servlet 6.0
)铺平了道路。 - 原生镜像与
GraalVM
支持: 提供了对Spring
应用编译为原生可执行文件的正式支持,能实现毫秒级启动和极低的内存占用,这是为云原生时代量身定做的特性。 - 观测能力: 引入了新的
ObservationContext
,统一了Metrics
(指标)和Tracing
(链路追踪)。 - 要求
Java 17+
: 强制要求JDK 17
或更高版本,以利用最新的LTS
版本的性能和语言特性。
- 基于
- 历史意义:
Spring 6
是一次面向未来的基础性升级,旨在引领Java
生态全面进入 云原生、原生编译和Jakarta EE
的新时代。
Spring Boot
Spring Boot
从 1.x
到 3.x
的迭代,见证了 Java
生态的演进。下面这个表格清晰地梳理了它们的主要区别和特性:
特性维度 | Spring Boot 1.x | Spring Boot 2.x | Spring Boot 3.x |
---|---|---|---|
最低JDK要求 | Java 7 | Java 8 | Java 17 |
Spring框架基础 | - | Spring Framework 5 | Spring Framework 6 |
配置方式 | XML与少量注解混合 | Java配置与注解为主 | 延续并增强Java配置与注解 |
核心技术栈 | Servlet容器、Spring MVC | 响应式编程(WebFlux)、Servlet | GraalVM原生镜像、Jakarta EE |
第三方集成 | 版本较旧的稳定库 | 升级至Hibernate 5.2+、Tomcat 8.5+等 | Jakarta EE 9+ (包名javax →jakarta ) |
维护状态 | 已停止维护 | 2.7.x及更早版本已停止维护 | 持续维护 |
版本变更
Spring Boot 1.x:经典的起点
1.x
版本以其稳定性和完善的生态系统著称。不过,它依赖的第三方库版本相对老旧,并且某些功能需要较多手动配置。需要注意的是,Spring Boot 1.x
已停止维护,因此新项目不建议选用。
Spring Boot 2.x:现代化的演进
2.x
是一个重要的现代化演进版本。它强制要求 JDK 8
,并利用其新特性(如Lambda
表达式、新的时间API
)提升了开发效率和代码质量。它引入了 Spring WebFlux
以支持响应式编程,并大幅精简了配置。需要注意的是,Spring Boot 2.7.x
是 2.x
的最后一个功能版本,也是支持 JDK 8
的终点,官方已停止免费维护。
从 1.x
升级到 2.x
时,需注意配置变更和API
更新。
🚀 Spring Boot 3.x:面向未来的飞跃
3.x
是一次面向未来的重大升级,强制要求 JDK 17 及以上。它基于 Spring Framework 6
,并全面转向 Jakarta EE 9+
(所有 javax
包名改为jakarta
),这是升级时最主要的破坏性变更和适配工作点。它提供了对 GraalVM
原生镜像的正式支持,能极大提升应用启动速度和降低内存占用,并增强了应用可观测性。
从 2.x
升级到 3.x
是重大变更,官方建议先升级到 2.7.x
版本,再升级到 3.x
,并需确保所有第三方依赖已兼容 Jakarta EE 9+。
选型建议
新项目启动
如果条件允许(团队熟悉且无需兼容旧JDK
环境),强烈推荐直接采用 Spring Boot 3.1.x
或 3.2.x
+ JDK 17/21 LTS
。这可以让你享受到最新的特性、性能优化和长期支持。
如果必须使用 JDK 8
,则只能选择 Spring Boot 2.7.x
,并需注意其已停止维护。
现有项目升级
从 2.x
升级到 3.x
:这是一个重大变更,务必规划充足的测试时间。升级路径是:先升级 JDK
到 17+
,再升级 Spring Boot 到 3.x
,最后解决 Jakarta EE
变更和依赖兼容性问题。
在 2.x
系列内升级:例如从 2.5.x
升级到 2.7.x
,通常相对平滑,但仍需参考官方发布说明,注意被弃用的配置。
微服务场景
若采用微服务架构并计划使用 Spring Cloud
,需特别注意版本对应关系。例如,Spring Boot 3.x
对应 Spring Cloud 2022.x
或 2023.x
,而 Spring Boot 2.7.x
则对应 Spring Cloud 2021.x
。
Spring Cloud
Spring Cloud
版本迭代很快,不同版本在特性和组件支持上差异显著。
Spring Cloud 版本 | 发布日期范围 | 核心特性 / 关键变化 | 对应的 Spring Boot 版本 |
---|---|---|---|
2022.0.x | 2022年及以后 | 需JDK 17以上;支持Spring Boot 3.x;全面转向Jakarta EE。 | 3.1.x, 3.0.x |
2021.0.x | 2021年 | 支持Spring Boot 2.7.x和2.6.x。 | 2.7.x, 2.6.x |
2020.0.x | 2020年 | 启用日历化版本号;需Spring Boot 2.4+;移除对Zuul 1等过时功能的支持。 | 2.5.x |
Hoxton | 2019-2020年 | Spring Boot 2.2.x/2.3.x的最后一个传统命名版本;增强对Spring Cloud Gateway和响应式编程的支持。 | 2.3.x |
Greenwich & Finchley | 2017-2019年 | 全面集成Netflix OSS组件(如Eureka, Hystrix);Finchley是个大版本,要求Spring Boot 2.x。 | 2.1.x (Greenwich), 2.0.x (Finchley) |
Edgware & Dalston | 2016-2017年 | 基于Spring Boot 1.5.x;Edgware相较Dalston支持了如spring-cloud-gateway等组件的新版本。 | 1.5.x |
Angel & Brixton | 2015-2016年 | 最初的版本;提供基础的服务发现、配置管理等能力。 | 1.2.x - 1.3.x |
选型建议:
- 如果条件允许(如可使用JDK 17),推荐选择 Spring Cloud 2022.0.x + Spring Boot 3.x,以便享受最新的技术特性和长期支持。
- 如果仍需使用JDK 8,可选择 Spring Cloud 2021.0.x + Spring Boot 2.7.x,但需注意官方已停止对该Spring Boot版本的免费维护。
Spring Cloud Alibaba
Spring Cloud Alibaba 与 Spring Cloud 的关系
实现与标准:
- Spring Cloud:定义了一套标准的微服务开发接口和规范(例如服务发现、配置管理、熔断降级等)。
- Spring Cloud Alibaba:是这套标准的一个具体实现,它用阿里巴巴的组件“填充”了 Spring Cloud 定义的这些接口。
下图直观地展示了Spring Cloud Alibaba如何作为桥梁,将阿里组件融入Spring Cloud生态:
版本特点与演进详解
Spring Cloud Alibaba 的版本与 Spring Cloud 和 Spring Boot 版本强相关。选择时务必参考官方提供的版本兼容表。
Spring Cloud Alibaba 版本 | 对应的 Spring Cloud 版本 | 支持的 Spring Boot 版本 | 核心组件与特点 |
---|---|---|---|
2022.0.0.0 | 2022.0.x | 3.0.x, 3.1.x | 支持 Spring Boot 3、JDK 17+、Jakarta EE。这是面向未来的版本。 |
2021.0.5.0 | 2021.0.x | 2.7.x, 2.6.x | 目前与 Spring Boot 2.7.x 搭配最稳定的版本之一。 |
2021.0.1.0 | 2021.0.x | 2.7.0 | 首个支持 Spring Cloud 2021 的版本。 |
2.2.10.RELEASE | Hoxton | 2.3.x, 2.2.x | 基于 Spring Boot 2.2-2.3 的经典稳定版本,许多老项目在使用。 |
2.2.7.RELEASE | Spring Cloud Hoxton | 2.2.x, 2.3.x | 引入 Nacos 2.0 客户端支持,性能提升。 |
2.2.0.RELEASE | Spring Cloud Hoxton | 2.2.x | 重大升级: • Nacos 成为服务发现和配置中心首选。 • Sentinel 成为熔断降级首选。 • Seata 正式集成,用于分布式事务。 |
2.1.0.RELEASE | Spring Cloud Greenwich | 2.1.x | 开始提供对 Spring Cloud Stream 的支持。 |
0.9.0.RELEASE 及更早 | Spring Cloud Edgware / Finchley | 2.0.x, 1.5.x | 早期探索版本,功能不完善,目前已不推荐使用。 |
核心组件功能
- Nacos:动态服务发现、配置管理和服务管理平台。相比 Eureka,它同时具备了服务注册中心和配置中心的功能,且支持配置的灰度管理。
- Sentinel:流量控制、熔断降级、系统自适应保护。相比 Hystrix,它提供了更丰富的流量控制维度(如 QPS、线程数、系统负载)和实时的监控台。
- Seata:高性能的分布式事务解决方案,提供了 AT、TCC 等模式。
本文用于本人技术学习和备忘。水平有限,如有错漏欢迎指正!
原创不易,如有转载请标注出处:https://blog.csdn.net/luyou0401/article/details/153249372