【精选】Spring框架介绍及Spirng各个版本的特性

2023-12-01 08:04

本文主要是介绍【精选】Spring框架介绍及Spirng各个版本的特性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Spring框架介绍

Spring框架英文全称Spring Framework,是由Spring团队研发的模块化、轻量级开源框架。其主要目的是为了简化项目开发。在项目开发中,可以说没有刻意使用Spring,却处处有着Spring存在。用官网对Spring框架的介绍:Spring框架核心功能包含依赖注入、事务管理、Web应用、数据访问、消息发送等等。

image-20230309162628416

曾经在网上流行过一个段子:

两个Java程序员对话,名字分别叫做A和B。

A:你用过Spring框架吗?

B:还用说,Java程序员谁没用过Spring框架!(带着不屑的表情)

A:那你知道Spring Framework吧?

B:Spring Framework?那不知道!

Spring Framework前身是interface21,由Rod Johnson于2002年研发,主要是为了不使用EJB下依然能够构建高质量Java EE项目。EJB是当年横行一时的Java EE标准,但因为实现了JavaEE中所有标准,想要用里面的功能,是买一送二,不管用不用,反正都提供,属于“重量级”标准。EJB在互联网时代几乎已经不出现了(但是在一些工业项目中还有EJB的应用)。EJB当年在Java的地位和诺基亚手机当年在手机行业的地位是一样的,而Spring框架就是目前手机界的苹果,国内的华为。

随着技术的更替,可能十年后,又有新的技术把Spring给替代了。我们现在把Spring学好,将来会流行一句话:“来孩子,给你介绍一下。这位是当年Spring玩的贼6的老爷爷”

既然提到了Spring框架之父Rod Johnson(罗宾·约翰逊,悉尼大学计算机硕士,音乐博士),就必须要说一下他大力宣扬的《轮子理论》。《轮子理论》是Spring框架的宗旨,也是Spring框架能够被其他人能接受的原因。

轮子理论:不要重复的创造轮子。这里面的轮子就是汽车的轮子,告诉我们已经生产过的轮子就拿过来用,没必须重复生产多余的轮子。

轮子理论放在Spring框架上:我们Spring框架不发明新的技术,我们只是让已经有的技术,使用起来更加简单(整个Spring框架最重要的一句话,Spring框架的作用到底是干什么的)。乍一看这句话没问题,但细品能发现Rod Johnson是个纯老六。说Spring框架不发明新的技术,是告诉别的公司,我们不抢你们的生意,来用我,我还能让你们的技术用起来更加方便。但实际上

MVC框架:曾经Apache爆火的Struts1和Struts2都被Spring MVC给干掉了,近几年Spring 自己又出了WebFlux自己要干自己。

数据访问层框架:曾经的Hibernate目前被MyBatis干掉了。Spring 团队出了Spring Data 一直在和MyBatis竞争。

2014年Spring Boot出现后又开始自己干自己了,要取代掉Spring框架。话又说回来了,虽说不学Spring框架,直接学习Spring Boot也可以。但是学习完Spring框架可以很轻松的学会Spring Boot框架,所以一般都拿Spring 框架作为Spring Boot框架基础学,同时在部分公司的项目依然使用Spring框架,所以学习Spring框架的意义还是比较大的。

image-20230309170423365

3.Spring Framework 主版本发布时间

springzhubanben

4.Spring Framework 各个版本重大变化

本套课程既然是针对小白进行讲解,那就不能只说Spring Framework 5 和 Spring Framework 6的区别,这样弄的好像同学们之前学习过Spring Framework 5一样。所以有必要来说一说Spring 从1.X版本到6.X版本的重大变化。这样才能深刻的感受到Spring Framework的发展变化。

版本版本特性
Spring Framework 1.01. 所有代码都在一个项目中 2. 支持核心功能IoC、AOP 3. 内置支持Hibernate、iBatis等第三方框架 4. 对第三方技术简单封装。如:JDBC、Mail、事务等 5. 只支持XML配置方式。
Spring Framework 2.01. 最重要的变化:支持注解配置 2. 增加对ehcache支持 3. 对JMS(Java消息服务)、JMX(Java管理扩展)等支持
Spring Framework 3.01. 支持Java类的配置 2. 由原来的一个项目拆分成多个子模块。 3. 添加单元测试子模块
Spring Framework 4.01. 全面支持Java 8 2. 添加二级子项目 Spring MVC ,基于Servlet 3.0开发 3. 提供WebSocket支持。 4. 引入@RestController等注解,增强对Restful的支持。
Spring Framework 5.01. 最低环境要求Java 8 2. 日志整合。把原来commons-logging 封装后变为spring-jcl模块 3. 跨域更改。把原来的JSONP支持变更为修改响应头的@CrossOrigin注解。 4. 响应式编程。添加二级子项目WebFlux 5. 使用Kotlin(科特林)进行函数式编程
Spring Framework 6.01. 最低环境要求Java 17 2. 加强对响应式编程支持。添加子模块spring-r2dbc 3. 取消子模块spring-orm-hibernate4,只保留spring-orm,只支持Hibernate5。

5.Spring Framework 5和6次版本支持时间

image-20230310140036960

6.Spring Framework 6 包含的模块

Spring 从3.0 版本开始把一个项目拆分成多个项目。到目前的Spring Framework 6版本,共计分为20个子模块。

suoyoumokuai

Test

对应spring-test.jar. Spring提供的测试工具, 可以整合JUnit测试或TestNG, 简化测试环节.

Core Container

Spring的核心组件, 包含了Spring框架最基本的支撑.

Beans, 对应spring-beans.jar. Spring进行对象管理时依赖的jar包.

Core, 对应spring-core.jar, Spring核心jar包,很多基础核心类都在这个包中。

Context, 对应spring-context.jar, Spring容器上下文对象.除了包含容器类型,很多第三方支持的内容都在这个模块中。

Expression, 对应spring-expression.jar, Spring表达式语言.可以通过表达式快速获取容器内容。

JCL,对应spring-jcl.jar。Spring日志,从spring老版本要求使用commons-logging.jar,从spring 5.x开始,自己对commons-logging做了封装。

AOP

面向切面编程, 对应spring-aop.jar.

Aspects

AspectJ的具体实现,面向切面编程的另一种实现。对应spring-aspects.jar

Instrumentation

服务器代理接口的具体实现。对应spring-instrument.jar

Messaging

集成messaging api和消息协议提供支持。对应spring-messaging.jar

Data Access/Integration

Spring对数据访问层的封装

JDBC, 对应spring-jdbc.jar. Spring对jdbc的封装, 当需要使用spring连接数据库时使用. spring-jdbc.jar需要依赖spring-tx.jar.

Transactions, 对应spring-tx.jar. 事务管理。

ORM, 对应spring-orm.jar. spring整合第三方orm框架需要使用的jar包, 例如Hibernate框架.

OXM,对应spring-oxm.jar。spring对XML序列化实现,本质是对Marshalling XML的支持。

R2DBC,对应spring-r2dbc.jar。对数据库响应式编程的支持。

JMS,对应spring-jms.jar。Spring 提供对JMS的框架。

Web

Spring对javax下的接口或类做的扩展功能.

web,对应spring-web.jar, Spring框架在Java Web项目使用时必须的包。

webmvc,对应spring-webmvc.jar, 实际上就是SpringMVC框架.

webflux,对应spring-webflux.jar,和Spring MVC类似,但是是目前比较流行的响应式编程。

websocket,对应spring-websocket.jar。spring对websocket的支持。

学习Spring其实就是在分别学习Spring所有模块的功能。随着Spring框架的不断发展,在Spring官方压缩包中包含的模块对应的jar也越来越多。

如果希望下载官方压缩包,查看所有jar包,可以通过下面链接下载。在Maven项目中,不需要单独下载下面内容。

友情提示:Spring 6目前只有源码,没有官方打包的dist。5.x和之前的版本都可以下载到官方打包的dist。

链接地址:

https://github.com/spring-projects/spring-framework/tags

https://repo.spring.io/libs-release-local/org/springframework/spring/

这篇关于【精选】Spring框架介绍及Spirng各个版本的特性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/440409

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

Java中的.close()举例详解

《Java中的.close()举例详解》.close()方法只适用于通过window.open()打开的弹出窗口,对于浏览器的主窗口,如果没有得到用户允许是不能关闭的,:本文主要介绍Java中的.... 目录当你遇到以下三种情况时,一定要记得使用 .close():用法作用举例如何判断代码中的 input