一、Spring介绍以及版本历史演进
背景
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介绍以及版本历史演进相关推荐
- 【转】Dynamics版本历史演进及Dynamics 365重要功能介绍
- Dynamics版本历史演进及Dynamics 365重要功能介绍
- 在spring官网上下载历史版本的spring插件,springsource-tool-suite
在spring官网上下载历史版本的spring插件,springsource-tool-suite 如何为自己的eclipse下载历史版本的sts呢?拼下载的url. 首先,鼠标右键可下载的sts链接 ...
- 【方向盘】版本历史代码示例之:Servelt、JSP、EL表达式
工具好,也要用得巧. 本文已被https://yourbatman.cn收录:女娲Knife-Initializr工程可公开访问啦:程序员专用网盘https://wangpan.yourbatman. ...
- 从未停止!OpenGL的版本历史和发展
由于本文的内容过长,在Chrome浏览器下可能不能完全显示,建议使用IE或者FireFox阅读本文. 来源请注明,本文永久地址为http://www.cnblogs.com/vertexshader/ ...
- OpenGL的版本历史和发展
从未停止!OpenGL的版本历史和发展 由于本文的内容过长,在Chrome浏览器下可能不能完全显示,建议使用IE或者FireFox阅读本文. 来源请注明,本文永久地址为从未停止!OpenGL的版本历史 ...
- Spring5源码分析系列(二)Spring源码版本命名规则及下载安装
Tom老师视频讲解第二章,这章主要是科普篇,介绍了下spring版本的命名规则及源码下载,文章参考自Tom老师视频. Spring源码版本命名规则 (1)首先看看某些常见软件的版本号: LinuxKe ...
- 【方向盘】版本历史代码示例之:WebSocket、JSTL
通透,是技术人应有的追求. 本文已被https://yourbatman.cn收录:女娲Knife-Initializr工程可公开访问啦:程序员专用网盘https://wangpan.yourbatm ...
- 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 ...
最新文章
- 使用OpenCV实现图像中的文字切割
- Linux下C程序插入执行shell脚本
- python3 logging模块_Python3之logging模块浅析
- Windows学习总结(6)——MindManager新手入门教程
- VI编辑器的基本使用
- Heroku运行Java
- hbase建索引java api_hbase创建索引
- 张孝祖的第一次作业展示
- 软件变更控制 - 控制成本溢出
- windows 代理软件_MacOS好用软件推荐(一)
- 江西理工大学c语言考试题库,江西理工大学C语言程序设计竞赛(初级组)(示例代码)...
- Python--模块微谈
- 简易JTAG线缆原理
- 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern)
- Scratch编程与科学结合-串联与并联
- spark3.0-spark入门-总结知识要点
- 官网正版UltraEdit、UltraFTP、UltraCompare安装激活使用
- 2021最全HW蓝队指导手册
- https开头的网址是什么意思_网址是什么意思?基础知识普及
- R语言(pROC)绘图