Spring框架介绍
Spring框架英文全称Spring Framework,是由Spring团队研发的模块化、轻量级开源框架。其主要目的是为了简化项目开发。在项目开发中,可以说没有刻意使用Spring,却处处有着Spring存在。用官网对Spring框架的介绍:Spring框架核心功能包含依赖注入、事务管理、Web应用、数据访问、消息发送等等。
曾经在网上流行过一个段子:
两个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框架的意义还是比较大的。
3.Spring Framework 主版本发布时间
4.Spring Framework 各个版本重大变化
本套课程既然是针对小白进行讲解,那就不能只说Spring Framework 5 和 Spring Framework 6的区别,这样弄的好像同学们之前学习过Spring Framework 5一样。所以有必要来说一说Spring 从1.X版本到6.X版本的重大变化。这样才能深刻的感受到Spring Framework的发展变化。
版本 | 版本特性 |
---|---|
Spring Framework 1.0 | 1. 所有代码都在一个项目中 2. 支持核心功能IoC、AOP 3. 内置支持Hibernate、iBatis等第三方框架 4. 对第三方技术简单封装。如:JDBC、Mail、事务等 5. 只支持XML配置方式。 |
Spring Framework 2.0 | 1. 最重要的变化:支持注解配置 2. 增加对ehcache支持 3. 对JMS(Java消息服务)、JMX(Java管理扩展)等支持 |
Spring Framework 3.0 | 1. 支持Java类的配置 2. 由原来的一个项目拆分成多个子模块。 3. 添加单元测试子模块 |
Spring Framework 4.0 | 1. 全面支持Java 8 2. 添加二级子项目 Spring MVC ,基于Servlet 3.0开发 3. 提供WebSocket支持。 4. 引入@RestController等注解,增强对Restful的支持。 |
Spring Framework 5.0 | 1. 最低环境要求Java 8 2. 日志整合。把原来commons-logging 封装后变为spring-jcl模块 3. 跨域更改。把原来的JSONP支持变更为修改响应头的@CrossOrigin注解。 4. 响应式编程。添加二级子项目WebFlux 5. 使用Kotlin(科特林)进行函数式编程 |
Spring Framework 6.0 | 1. 最低环境要求Java 17 2. 加强对响应式编程支持。添加子模块spring-r2dbc 3. 取消子模块spring-orm-hibernate4,只保留spring-orm,只支持Hibernate5。 |
5.Spring Framework 5和6次版本支持时间
6.Spring Framework 6 包含的模块
Spring 从3.0 版本开始把一个项目拆分成多个项目。到目前的Spring Framework 6版本,共计分为20个子模块。
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/