spring框架的演变

 

Spring 框架源自 Rod Johnson 编写的 Expert One-on-One: J2EE Design and Development 一书(Wrox 出版社,2002 年出版) 。在过去十年中, Spring 框架在核心功能、相关项目以及社区支持方面发展迅猛。随着 Spring 框架的新主要版本的推出,有必要快速回顾一下 Spring 的每个里程碑版本所带来的重要特性,并最终发展到 Spring Framework 5.0 。

  • Spring 0.9: 这是该框架第一个公开发布的版本,以 Expert One-on-One: J2EE Design and Deνelopment 一书为基础,提供了 bean 配置基础、 AOP 支持、 JDBC 抽象框架、抽象事务支持等。 该版本没有官方参考文档,但可以在 SourceForge上找到现有的源代码和文档。
  • Spring 1.x: 这是发布的第一个带有官方参考文档的版本 。它由图 1-1 所示的七个模块组成 。
    • Spring Core: bean 容器以及支持的实用程序 。
    • Spting Context: ApplicationContext、 UI、验证、JNDI, Enterprise JavaBean(EJB)、远程处理和邮件支持。
    • SpringDAO :事务基础结构、Java Database Connectivity(JDBC)和数据访问对象(DAO)支持 。
    • SpringORM :Hibernate、 iBATIS 和 Java Data Object(JDO)支持 。
    • SpringAOP : 符合 AOP 联盟的面向方面编程(AOP)实现 。
    • Spting Web :基本集成功能,比如 多部分功能、通过 servlet 侦听器进行上下文初始化以及面向 Web 的应用程序上下文。
    • Spring Web MVC : 基于 Web 的 Medel-View-Controller(MVC)框架 。
  • Spring 2.x 该版本由图 1-2 所示的六个模块组成。 现在, Spring Context 模块包含在 Spting Core中,而在Spring 2.x 版本中 ,所有的 Spring Web 组件都由单个项目表示 。 01.png
    • 通过使用新的基于XML Schema 的配置而不是 DTD 格式来简化XML 配置。值得注意的改进方面包括bean 定义、AOP以及声明式事务 。
    • 用于 Web 和门户的新 bean 作用域(请求、会话和全局会话) 。
    • 支持 AOP 开发的@AspectJ 注解 。
    • Java Persistence(JPA)抽象层 。
    • 完全支持异步 JMS 消息驱动的 POJO(用于普通的旧 Java 对象) 。
    • JDBC 简化包括在使用 Java 5+时的 SimpleJdbcTemplate。
    • JDBC 命名参数支持(NamedParameterJdbc Template) 。
    • 针对 SpringMVC 的表单标签库 。
    • 对 PortletMVC 框架的介绍 。
    • 动态语言支持。可以使用 JRuby、 Groovy以及 BeanShell 来编写 bean 。
    • JMX中的通知支持以及可控的 MBean 注册 。
    • 为调度任务而引入的 TaskExecutor 抽象 。
    • Java 5 注解支持,特别针对@Transactional 、 @Required 和@AspectJ 。
  • Spring 2.5.x:该版本包含以下功能 。
    • 名为@Autowired 的新配置注解以及对 JSR-250 注解(@Resource、@PostConstruct 和@PreDestroy)的支持。
    • 新的构造型注解: @Component、 @ Repository、 @Service 和@Controller.
    • 自动类路径扫描支持,可以检测和连接带有构造型注解的类。
    • AOP 更新,包括一个新的 bean 切入点元素以及 AspectJ 加载时织入(weaving) 。
    • 完整的 WebSphere 事务管理支持。
    • 除了 Spring MVC @Controller 注解,还添加了@RequestMapping、 @RequestParam 和@ModelAttribute 注解,从而支持通过注解配置进行请求处理。
    • 支持Tiles 2.
    • 支持JSF1.2
    • 支持JAX-WS2.0/2.1
    • 引入了 Spring TestContext Framework,提供注解驱动和集成测试支持 ,不受所用测试框架的影响。
    • 能够将 Spring 应用程序上下文部署为 JCA 适配器 。
  • Spring 3.0.X: 这是基于Java5的Spring的第一个版本,旨在充分利用Java5的功能,如泛型、可变参数和其他语言改进。该版本引入了基于Java的@Configuration模型。目前已经对框架模块进行了修改,分别针对每个模块JAR使用一棵源代码树进行管理。图1-3中对此进行了抽象描述。

    02.png

    • 支持Java5功能,例如泛型、可变参数以及其他改进。
    • 对Callables、Futures、ExecutorService适配器和ThreadFactory集成提供很好的支持。
    • Spring Expression Language(SpEL)的引入。
    • 核心Java Config功能和注解的集成。
    • 通用型转换系统和字段格式化系统。
    • 全面支持REST。
    • 新的MVC XML 名称空间和其他注解,例如Spring MVC中的@CookieValue和@RequestHeaders。
    • 验证增强功能和JSR-303(bean验证)支持。
    • 对JavaEE6的早期支持,包括@Async/@Asynchronous注解、JSR-303、JSF 2.0、JPA 2.0等。
    • 支持嵌入式数据库,例如HSQL、H2和Derby。
  • Spring 3.1.X: 该版本包含以下功能。
    • 新的缓冲抽象。
    • 可以用XML定义bean定义配置文件,同时也支持@Profile注解。
    • 针对统一属性管理的环境抽象。
    • 与常见Spring XML名称空间元素等价的注解,如@ComponentScan、@EnableTransactionManagement、@EnableCaching、@EnableWebMvc、@EnableScheduling、@EnableAsync、@EnableAspectJAutoProxy、@EnableLoadTimeWeaving、和EnableSpringConfigured。
    • 支持Hibernate 4。
    • Spring TestContext Framework 对@Configuration类和bean定义配置文件的支持。
    • 名称空间c:简化了构造函数注入。
    • 支持Servlet3中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 JSON 2。
    • 支持Tiles 3。
    • 现在,@RequestBody或@RequestPart参数的后面可以跟一个Errors参数,从而可以对验证错误进行处理。
    • 能够通过使用MVC名称空间和Java Config 配置选项来排除URL模式。
    • 支持没有Joda Time的@DateTimeFormat。
    • 全局日期和时间格式化。
    • 跨框架的并发优化,从而最小化锁定,并改进了作用域原型bean的并发创建。
    • 新的基于Gradle的构建系统。
    • 迁移到Github(https://github.com/SpringSource/spring-framework)。
    • 在框架和第三方依赖中支持精简的JavaSE7/OpenJDK7。现在,CGLIB和ASM已经成为Spring的一部分。除了Aspect1.6,其他版本都支持Aspect1.7。
  • Spring4.0.X: 这是一个重要的Spring版本,也是第一个完全支持Java8的版本。虽然仍然可以使用旧版本的Java,但JavaSE6已经提出了最低版本要求。弃用的类和方法已被删除,但模块组织几乎相同,如同1-4所示。

    03.png

    • 通过新的(www.spring.io/guides) 网站上的一系列入门指南提高了入门体验。
    • 从先前的 Spring 3 版本中删除了弃用的软件包和方法 。
    • 支持 Java 8 ,将最低 Java 版本提高到 6 update 18。
    • Java EE 6 及以上版本现在被认为是 Spring Framework 4.0 的基准。
    • Groovy bean定义DSL,允许通过 Groovy 语法配置bean定义。
    • 核心容器、测试和一般 Web 改进。
    • WebSocket、 SockJS 和 STOMP 消息。
  • Spring 4.2.x: 该版本包含以下功能。
    • 核心改进(例如,引入@AliasFor,并修改现有的注解以使用它) 。
    • 全面支持 Hibernate ORM 5.0 。
    • JMS 和 Web 改进 。
    • 对 WebSocket 消息传递的改进 。
    • 测试改进,最引人注目的是引入了@Commit来替换@Rollback(false),并引入了 AopTestUtils 实用工具类,允许访 问隐藏在 Spring 代理后面的底层对象。
  • Spring 4.3.x : 该版本包含以下功能 。
    • 完善了编程模型 。
    • 在核心容器(包含 ASM5.1、CGLIB 3.2.4 以及 spring-core.jar 中的 Objenesis 2.4)和 MVC 方面有了相当大的改进。
    • 添加了组合注解 。
    • Spring TestContext Framework 需要 JUnit4.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 完全兼容。
    • 支持Portlt、Velocity、JasperReports、XMLBeans、JDO、Guava、Tiles 2和Hibernate 3。
    • 现在,XML 配置名称空间被流式传输到未版本化的模式;虽然特定版本的声明仍然被支持,但要针对最新的 XSD 架构进行验证 。
    • 充分利用 Java 8 的强大功能,从而在性能上得到极大的改进。
    • Resource 抽象为防御 getFile 访问提供了 isFile 指示符。
    • Spring 提供的 Filter 实现完全支持 Servlet 3.1 签名。
    • 支持 Protobuf3.0。
    • 支持 JMS2.0+和 JPA 2.1 +。
    • 引入了 Spring Web Flow , 这是一个用于替代 SpringMVC 的项目,构建在反应式基础之上,这意味着它完全是异步和非阻塞的,主要用于事件循环执行模型,而非传统的每个请求执行模型都带有一个线程的大型线程池(基于 Project Reactor 构建)。
    • Web 和核心模块适用于反应式编程模型。
    • Spring 测试模块有了很大的改进。现在支持 JUnit5,引入了新的注解来支持 Jupiter 编程和扩展模型,例如@SpringJUnitConfig、@SpringJUnitWebConfig、@Enabledlf和@Disabledlf。
    • 支持在 Spring TestContext Framework 中实现并行测试执行 。