背景

Spring的第一个版本于2002年10月发布,由一个带有易于配置和使用的控制反转(IoC)容器的小型内核组成。多年来,Spring已经成为Java Enterprise Edition(Java企业版JEE)的主要替代品,并且发展成一个由许多不同项目组成的成熟技术。

Spring版本历史演进

通常情况下,Spring被描述为构建Java应用程序的轻量级框架。

  • Spring可以构建Java中任何应用程序(独立的应用程序,Web应用,JEE应用程序)
  • 轻量级一次的指的是整体性定义Spring的原则:最轻的影响,而不是类的数量和发布的大小。因为只要对程序代码进行很少的更爱就可以获得Spring Core所带来的好处,同样想停止使用也很容易做到。(只针对于Spring Core)

Spring框架的演变

Spring 0.9

这是该框架第一个公开发布的版本,以Exper One-on-One:J2EE Design and Development一书 为基础,提供了bean配置基础、AOP支持、JDBC抽象框架、抽象事务支持等。该版本没有官方参考文档,但可以在SourceForge上找到现有的源代码和文档。

Spring 1.x

这是发布的第一个带有官方参考文档的版本。它由下图所示的七个模块组成。

  • Spring Core:bean容器以及支持的实用程序。
  • Spring Context:ApplicationContext、UI、验证、JNDI、Enterprise JavaBean(EJB)、远程处理和邮件支持。
  • Spring ORM:Hibernate、iBATIS和Java Data Object(JDO)支持。
  • Spring AOP:符合AOP联盟的面向方面编程(AOP)实现。
  • Spring Web:基本集成功能,比如多部分功能、通过servlet侦听器进行上下文初始化以及面向Web的应用程序上下文。
  • Spring Web MVC:基于Web 的Model-View-Controller(MVC)框架。
Spring 2.x

该版本由下图所示的六个模块组成。现在Spring Context模块包含在Spring Core中,而在Spring 2.x 版本中,所有的Spring Web组件都由单个项目表示。

  • 通过使用新的基于XML Schema的配置而不是DTO格式来简化XML配置。值得注意的改进方面包括bean定义、AOP以及声明式事务。
  • 用于Web和门户的新bean作用域(请求、会话和全局会话)。
  • 支持AOP开发的@AspectJ注解。
  • Java Persistence API(JPA)抽象层。
  • 完全支持异步JMS消息驱动的POJO(用于普通的旧Java对象)。
  • JDBC简化包括在使用Java5+时的SimpleJdbcTemplate。
  • JDBC命名参数支持(NamedParameterJdbcTemplate)。
  • 针对Spring MVC的表单标签库。
  • 对Porlet MVC框架的介绍。
  • 动态语言支持。可以使用JRuby、Groovy以及BeanShell来编写bean。
  • JMX中的通知支持以及可控的MBean注册。
  • 为调度任务而引入的TaskExecutor注册。
  • 为调度任务而引入的TaskExecutor抽象。
  • Java注解支持,特别针对@Transactional、@Required和@AspectJ。
Spring 2.5.x

该版本包含以下功能。

  • 名为@Autowired 的新配置注解以及对JSR-250注解(@Resource、@PostConstruct和PreDestroy)支持。
  • 新的构造型注解:@Component、@Repository、@Service、和@Controller。
  • 自动类路径扫描支持,可以检测和连接带有构造型注解的类。
  • AOP更新,包括一个新的bean切入点元素以及AspectJ加载时织入(weaving)。
  • 完整的WebSphere事务管理支持。
  • 除了SpringMVC@Controller注解,还添加了@RequestMapping、@RequestParam和@ModelAttribure注解,从而支持通过注解配置进行请求处理。
  • 支持Tiles2。
  • 支持JSF1.2。
  • 支持JAX-WS2.0/2.1。
  • 引入了Spring TestContext Framework,提供注解驱动和集成测试支持,不受所用测试框架的影响。
  • 能够将Spring应用程序上下文部署为JCA适配器。
Spring 3.x

这是基于Java5的第一个版本,旨在充分利用Java5的功能,如泛型、可变参数和其他语言改进。该版本引入了基于Java的@Configuration模型。目前已经对框架模块进行了修改,分别针对每个模块JAR使用一棵源代码树进行管理。
如下图所示的抽象描述

  • 支持Java5功能,例如泛型、可变参数以及其他改进。
  • 对Callables、Futures、ExceutoService适配器和ThreadFactory集成提供很好的支持。
  • 框架模块目前针对每个模块JAR都使用一课源代码树进行分别管理。
  • Spring Expression Language(SpEL)的引入。
  • 核心Java Config功能和注解的集成。
  • 通用型转换系统和字段格式化系统。
  • 全面支持REST。
  • 新的MVC XML名称空间和其他注解,例如Spring MVC中的@CookieValue和@RequestHeaders。
  • 验证增强功能和JSR-303(bean验证)支持。
  • 对JavaEE6的早期支持,包括@Async/@Asynchronous注解、JSR303、JSF2.0、JPA2.0等。
  • 支持嵌入式数据库,例如HSQL、H2和Derby。
Spring 3.1.x

该版本包含以下功能。

  • 新的缓冲对象。
  • 可以用XML定义bean定义配置文件,同时也支持@Profile注解。
  • 针对统一属性管理的环境抽象。
  • 与常见Spring XML名称空间元素等价的注解,如@ComponentScan、@EnableTransationManagement、@EnableCaching、@EnableScheduling、@EnableAsync、@EnableAspectAutoProxy、@EnableLoadTimeWeaving和@EnableSpringConfigured。
  • 支持Hibernate 4。
  • Spring TestContext Framework对@Configuration类和bean定义配置文件的支持。
  • 名称空间 c:简化了构造函数注入。
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:c="http://www.springframework.org/schema/c"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="bar" class="x.y.Bar"/><bean id="baz" class="x.y.Baz"/><-- 'traditional' declaration -->      <bean id="foo" class="x.y.Foo"><constructor-arg ref="bar"/><constructor-arg ref="baz"/><constructor-arg value="foo@bar.com"/></bean><-- 'c-namespace' declaration --><bean id="foo" class="x.y.Foo" c:bar-ref="bar" c:baz-ref="baz" c:email="foo@bar.com"></beans>
  • 支持Servlet 3中Servlet容器的基于代码的配置。
  • 能够在不使用persistence.xml的情况下启动JPA EntityManagerFactory。
  • 将Flash和RedirectAttributes添加到Spring MVC中,从而允许通过使用HTTP会话重定向属性。
  • URI模板变量增强功能。
  • 能够使用@Valid来注解Spring MVC @RequestBody 控制器方法参数。
  • 能够使用@RequestPart来注解Spring MVC 控制器方法参数。
Spring 3.2.x

该版本包含以下功能。

  • 支持基于Servlet 3的一步请求处理。
  • 新的Spring MVC 测试框架。
  • 新的Spring MVC 注解@ControllerAdvice 和 @Matrix Variable。
  • 支持RestTemplate和@RequestBody参数中泛型类型。
  • 支持Jackson JSON2。
  • 支持Tiles 3。
  • 现在,@RequestBody或@RequestPart参数的后面可以跟着一个Errors参数,从而可以对验证错误进行处理。
  • 能够通过使用MVC名称空间和Java Config 配置选项来排除URL模式。
  • 支持没有Joda Time的@DateTimeFormat.
  • 全局日期和时间格式化。
  • 跨框架的并发优化,从而最小化锁定,并改进了作用域/原型bean的并发创建。
  • 新的机遇Gradle的构建系统。
  • 迁移到Github(https://github.com/spring-projects/spring-framework)。
  • 在框架和第三方依赖中支持精简的Java SE7/OpenJDK 7。现在,CGLIB和ASM已经成为Spring的一部分。除了AspectJ1.6,其他版本都支持AspectJ 1.7。
Spring 4.0.x

这是一个重要的Spring版本,也是第一个完全支持Java 8的版本。虽然仍然可以使用较旧版本的Java,但Java SE6已经提出了最低版本要求。启用的类和方法已经被删除,但模块组织几乎相同。
如下图所示

  • 通过 www.spring.io/guides 网站上的一系列入门指南提高了入门体验。
  • 从先前的Spring 3 版本中删除弃用的软件包和方法。
  • 支持Java8,将最低Java版本提高到6 update 18。
  • Java EE6 及以上版本现在被认为是Spring Framework 4.0的基准。
  • Groovy bean定义DSL,允许通过Goovy语法配置bean定义。
  • 核心容器、测试和一般web改进。
  • WebSocket、SocJS、和STOMP消息。
Spring 4.2.x

该版本包含以下功能。

  • 核心改进(例如,引入@AliaFor,并修改现有的注解以使用它)。
  • 全面支持Hibernate ORM 5.0。
  • JMS和Web改进。
  • 对WebSocket消息传递的改进。
  • 测试改进,最引人注目的是引入了@Commit来替换@Rollback(false),并引入AopTestUtils使用工具类,允许访问隐藏在Spring代理后面的底层对象。
Spring 4.3.x

该版本包含以下功能。

  • 完善了编程模型。
  • 在核心容器(包含ASM 5.1、CGLIB 3.2.4以及spring-core.jar中的Objenesis 2.4)和MVC方面有了相当大的改进。
  • 添加了组合注解。
  • Spring TestContext Framework需要JUnit 4.12或更高版本。
  • 支持新的库,包括Hibernate ORM 5.2、Hibernate Validator 5.3、Tomcat 8.5和9.0、Jackson 2.8等。
Spring 5.x
  • 这是一个主要版本。整个框架代码都基于Java 8,并且自2016年7月起与Java 9完全兼容。
  • 支持Portlet、Veloctiy、JaspReports、XMLBeans、JDO、Guava、Tiles 2和Hibernate 3。
  • 现在XML 配置名称空间被流式传输到未版本化的模式;虽然特定版本的声明仍然被支持,但要针对最新的XSD架构进行验证。
  • 充分利用Java 8 的强大功能,从而在性能上得到极大的改进。
  • Resource 抽象为防御 getFile 访问提供了isFile指示符。
  • Spring 提供的Filter实现完全支持Servlet 3.1签名。
  • 支持 Protobuf 3.0。
  • 支持JMS 2.0+和JPA 2.0+。
  • 引入了Spring Web Flow,这是一个用于替代Spring MVC的项目,构建在反应式基础之上,这意味着他完全是异步和非阻塞的,主要用户事件循环执行模型,而非传统的每个请求执行模式都带有一个线程的大型线程池(基于Project Reactor构建)。
  • Web 和核心模块适用于反应式编程模型。
  • Spring 测试模块有了很大的改进。现在支持JUnit 5,引入了新的注解来支持 Jupiter 编程和扩展模型,例如@SpringUnitConfig、@SpringJUnitWebConfig、@EnabledIf和@DisabledIf。
  • 支持在 Spring TestContext Framework 中实现并行测试执行。

以上内容均来自于《Spring 5 高级编程 第五版》清华大学出版社 第一章 Spring 介绍

一、Spring介绍以及版本历史演进相关推荐

  1. 【转】Dynamics版本历史演进及Dynamics 365重要功能介绍

               

  2. Dynamics版本历史演进及Dynamics 365重要功能介绍

  3. 在spring官网上下载历史版本的spring插件,springsource-tool-suite

    在spring官网上下载历史版本的spring插件,springsource-tool-suite 如何为自己的eclipse下载历史版本的sts呢?拼下载的url. 首先,鼠标右键可下载的sts链接 ...

  4. 【方向盘】版本历史代码示例之:Servelt、JSP、EL表达式

    工具好,也要用得巧. 本文已被https://yourbatman.cn收录:女娲Knife-Initializr工程可公开访问啦:程序员专用网盘https://wangpan.yourbatman. ...

  5. 从未停止!OpenGL的版本历史和发展

    由于本文的内容过长,在Chrome浏览器下可能不能完全显示,建议使用IE或者FireFox阅读本文. 来源请注明,本文永久地址为http://www.cnblogs.com/vertexshader/ ...

  6. OpenGL的版本历史和发展

    从未停止!OpenGL的版本历史和发展 由于本文的内容过长,在Chrome浏览器下可能不能完全显示,建议使用IE或者FireFox阅读本文. 来源请注明,本文永久地址为从未停止!OpenGL的版本历史 ...

  7. Spring5源码分析系列(二)Spring源码版本命名规则及下载安装

    Tom老师视频讲解第二章,这章主要是科普篇,介绍了下spring版本的命名规则及源码下载,文章参考自Tom老师视频. Spring源码版本命名规则 (1)首先看看某些常见软件的版本号: LinuxKe ...

  8. 【方向盘】版本历史代码示例之:WebSocket、JSTL

    通透,是技术人应有的追求. 本文已被https://yourbatman.cn收录:女娲Knife-Initializr工程可公开访问啦:程序员专用网盘https://wangpan.yourbatm ...

  9. Spring 4.x版本新特性

    文章目录 版本历史 Spring 3.x Spring 4.x Spring 5.x Spring 4.x 各个子版本特性 Spring 4.0.x Spring 4.2.x Spring 4.3.x ...

最新文章

  1. 使用OpenCV实现图像中的文字切割
  2. Linux下C程序插入执行shell脚本
  3. python3 logging模块_Python3之logging模块浅析
  4. Windows学习总结(6)——MindManager新手入门教程
  5. VI编辑器的基本使用
  6. Heroku运行Java
  7. hbase建索引java api_hbase创建索引
  8. 张孝祖的第一次作业展示
  9. 软件变更控制 - 控制成本溢出
  10. windows 代理软件_MacOS好用软件推荐(一)
  11. 江西理工大学c语言考试题库,江西理工大学C语言程序设计竞赛(初级组)(示例代码)...
  12. Python--模块微谈
  13. 简易JTAG线缆原理
  14. 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern)
  15. Scratch编程与科学结合-串联与并联
  16. spark3.0-spark入门-总结知识要点
  17. 官网正版UltraEdit、UltraFTP、UltraCompare安装激活使用
  18. 2021最全HW蓝队指导手册
  19. https开头的网址是什么意思_网址是什么意思?基础知识普及
  20. R语言(pROC)绘图

热门文章

  1. 四大美人与八大美味——传说中的尴尬
  2. Excel: xls、xlsx最大行列区别
  3. Executor, ExecutorService 和 Executors 间的不同
  4. PTA 7-77 寻找自守数
  5. 记一次Base64编码的应用
  6. 改变eclipse字体:
  7. SAP接口故障排除与外部断点调试 XI 代理
  8. VS CODE 微软旗下最好用的前端开发IDE编辑器+常用插件介绍
  9. 【路径规划】蚁群算法求解电动汽车充电站与换电站协调路径规划【含GUI Matlab源码 796期】
  10. 04_控制系统的复域数学模型