什么是Spring

如果想要解释Spring,那么最难的部分就是对其进行分类。通常情况下,Spring被描述为构建Java应用程序的轻量级框架,但这种描述带来了两个有趣的观点。

首先,与许多其他框架(比如仅限于Web应用程序的Apache Struts)不同,可以使用Spring构建Java中的任何应用程序(例如,独立的应用程序、Web应用程序或JEE应用程序)。

其次,该描述中轻量级的,因为只需要对应用程序代码进行很少的更改(如果有的话)就可以获得Spring Core所带来的好处。如果想要在任何时候停止使用Spring,那么你会发现可以很容易做到。

请注意,上述描述仅针对Spring Core-许多额外的Spring组件(例如数据访问)需要更紧密地与Spring框架耦合。然而,这种耦合的好处是非常明显的。

Spring框架的演变

在过去十年中,Spring框架在核心功能、相关项目以及社区支持方面发展迅猛。今天就来一起快速回顾一下Spring的每个里程碑版本所带来的重要特性,并最终发展Spring Framework5.0。

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.0.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/beans
http://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消息。

Spring4.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 框架虽然在不断的演变,但是核心的原理还没有太大变化的。用IOC或DI来以不变应万变。下次介绍核心内容的演变。

Spring框架的演变的更多相关文章

  1. Spring 数据处理框架的演变

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 定量分析的成败在很大程度上取决于采集,存储和处理数据的能力.若能及时地向业务决策者提供深刻并可靠的数据解读,大数据项目就会有更多机会取得成功 ...

  2. Spring框架概述

    Spring是最流行的Java企业级应用开发框架,全球数以百万的开发者在使用Spring框架创建高性能.易测试.可重用的代码. Spring框架的核心特性可以应用于任何Java应用,但扩展的JavaE ...

  3. 初识Spring框架实现IOC和DI(依赖注入)

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的, IoC是 ...

  4. Spring 框架的架包分析、功能作用、优点,及jar架包简介

    Spring 框架的架包详解    Spring的作用     Spring的优势  由于刚搭建完一个MVC框架,决定分享一下我搭建过程中学习到的一些东西.我觉得不管你是个初级程序员还是高级程序员抑或 ...

  5. 最新 Eclipse IDE下的Spring框架配置及简单实例

    前段时间开始着手学习Spring框架,又是买书又是看视频找教程的,可是鲜有介绍如何配置Spring+Eclipse的方法,现在将我的成功经验分享给大家. 本文的一些源代码来源于码农教程:http:// ...

  6. spring框架学习(三)

    一.Spring自动组件扫描 Spring 提供组件扫描(component scanning)功能.它能从指定的classpath里自动扫描.侦测和实例化具有特定注解的组件. 基本的注解是@Comp ...

  7. Spring框架学习(一)

    一. spring概述 Spring 框架是一个分层架构,由 7 个定义良好的模块组成.Spring 模块构建在核心容器之上,核心容器定义了创建.配置和管理 bean 的方式,如图 1 所示. 图 1 ...

  8. Spring 系列: Spring 框架简介 -7个部分

    Spring 系列: Spring 框架简介 Spring AOP 和 IOC 容器入门 在这由三部分组成的介绍 Spring 框架的系列文章的第一期中,将开始学习如何用 Spring 技术构建轻量级 ...

  9. 使用 Spring Boot 快速构建 Spring 框架应用--转

    原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-spring-boot/ Spring 框架对于很多 Java 开发人员来说都不陌生.自从 2 ...

随机推荐

  1. IDEA将项目导出war包方法(详细)

    右上角点击进入配置页面(如图)选择Artifcts 点击绿色的那个+号,选择Web Application:Archive; 设置名称,选择输出路径 下面开始打war包在Build下面选择Build ...

  2. IntelliJ IDEA 2017版 使用笔记(十二) 其他操作:IDEA 快捷键

    其他操作   文件操作: 一.文件操作       新建文件ctrl+shift+n    二.复制当前文件       快捷键:F5   三.移动当前文件       快捷键 :F6       文 ...

  3. 微信小程序的新的

    app.request.get('http://ele.kassing.cn/v1/pois',this.data.city).then(res=>{ console.log(res) this ...

  4. UVaLive 3704 Cellular Automaton (循环矩阵 + 矩阵快速幂)

    题意:一个细胞自动机包含 n 个格子,每个格子取值是 0 ~ m-1,给定距离,则每次操作后每个格子的值将变成到它距离不超过 d 的所有格子在操作之前的值之和取模 m 后的值,其中 i 和 j 的距离 ...

  5. Hibernate关联关系配置(一对多,一对一,多对多)

    一对多 创建两个类  Manager(一这一端) Worker(多这一端)  即一个经理下有多个员工 package com.hibernate.n21; import java.util.HashS ...

  6. VB6.0中WinSock控件属性和方法详解

    原文链接:http://liweibird.blog.51cto.com/631764/653134 WinSock控件能够通过UDP协议(用户数据报协议)或TCP协议(数据传输协议)连接到远程的机器 ...

  7. 公司内部Samba 服务器架设

    1.需求 在公司内部打造一个文件管理系统,其作用域仅仅在公司内部,支持在线对文件的修改和保存操作等,同时也要注意权限问题. 2.策划 目前设立四个群组:运维.开发 .测试和普通,当然所对应的对文件的访 ...

  8. leaflet入门(二)GeoJson

    GeoJson格式数据的形式 Using GeoJSON with Leaflet GeoJSON is becoming a very popular data format among many ...

  9. Ethernet II和802.3

    在卷一中:(章节二:数据链路层) 在T C P / I P协议族中,链路层主要有三个目的: (1)为IP模块发送和接收IP数据报: (2 )为ARP模块发送ARP请求和接收ARP应答: (3 )为RA ...

  10. quartz之hello(java)

    quartz    任务调度框架 简单的说:就是在特定的时间,干指定的事件,然后具体到某个对象去做 quartz初之体验: 1.pom.xml文件(导入jar包) <dependencies&g ...