向 Spring Framework 5.0 进化

Spring 模块#

Spring核心容器#

Spring 核心容器提供了 Spring Framework 的核心功能——依赖注入(DI)、IoC(控制反转)容器和应用程序上下文。

下表列出了重要的核心 Spring 模块:

  • spring-core 其他 Spring 模块使用的实用程序
  • spring-beans 支持 Spring bean;与 spring-core 一起提供 Spring Framework 的核心功能——依赖注入;帮助实现 BeanFactory
  • spring-context 实现 ApplicationContext,它将扩展 BeanFactory 并支持资源加载、国际化等
  • spring-expression 扩展 EL(JSP 中的表达式语言)并为访问和操纵 bean 属性(包括数组和集合)提供了语言

横切关注点#

横切关注点适用于所有应用程序层——日志记录和安全性等。AOP 通常用于实现横切关注点。单元测试和集成测试也属于这一类别,因为它们同样适用于所有层。

下表列出了与横切关注点相关的重要 Spring 模块:

  • spring-aop 利用方法拦截器和切入点,为面向切面编程提供基本支持
  • spring-aspects 支持与最流行的、功能全面的 AOP 框架 AspectJ 进行集成
  • spring-instrument 提供基本的监测支持
  • spring-test 为单元测试和集成测试提供基本支持

Web层#

除了可以全面集成 Struts等常用 Web框架外,Spring还拥有自己的 MVC框架——Spring MVC。 重要的 artifact/模块如下所示:

  • spring-web:提供基本的 Web 功能,如多文件上传。支持集成 Struts 等其他 Web 框架。
  • spring-webmvc:提供功能全面的 Web MVC 框架——Spring MVC,该框架还提供了实现 REST 服务的功能。

业务层#

业务层主要负责执行应用程序的业务逻辑。使用 Spring 时,通常在简单 Java 对象(POJO) 中实现业务逻辑。 Spring Transactions(spring-tx)为 POJO 和其他类提供声明式事务管理。

数据层#

应用程序中的数据层通常负责与数据库或外部接口进行交互。与数据层相关的一些重要 Spring 模块如下表所示:

  • spring-jdbc 围绕 JDBC 提供抽象层,以避免出现样板代码
  • spring-orm 用于集成 ORM 框架和规范——JPA 和 Hibernate 等
  • spring-oxm 提供一个对象来支持 XML 映射集成。支持 JAXB、Castor 等框架
  • spring-jms 围绕 JMS 提供抽象层,以避免出现样板代码

Spring 项目#

Spring Boot#

Spring Boot 开箱即可解决以下问题:

  • 选择框架并确定兼容的框架版本;
  • 为配置外部化提供机制——可从一个环境转向另一环境的属性;
  • 运行状况检查和监视——在应用程序的特定部件关闭时发出警报;
  • 确定部署环境并为其配置应用程序。

Spring Cloud#

Spring Cloud 为分布式系统中的通用模式提供了解决方案,实现的一些通用模式如下:

  • 配置管理
  • 服务发现
  • 熔断机制
  • 智能化路由

Spring Framework 5.0 中的新增功能#

Spring Framework 5.0 推出的最强大功能之一是反应式编程(Reactive Programming),直接支持核心反应式编程功能和反应式端点。一些重要的变更如下:

  • 基准升级;
  • JDK 9 运行时兼容性;
  • 在 Spring Framework 代码中使用 JDK 8 功能;
  • 反应式编程支持;
  • 函数式 Web 框架;
  • 用 Jigsaw 实现 Java 模块化;
  • Kotlin 支持;
  • 已停用的功能。

基准升级#

Spring Framework 5.0 以 JDK 8 和 Java EE 7 为基准。基本上,这意味着它不再支持以前版本的 JDK 和 Java EE。

下面列出了 Spring Framework 5.0 的一些重要基准 Java EE 7 规范:

  • Servlet 3.1
  • JMS 2.0
  • JPA 2.1
  • JAX-RS 2.0
  • Bean Validation 1.1

受支持的一些 Java 框架的最低版本出现了许多变化。下面列出了一些受支持的主要框架的最低版本:

  • Hibernate 5
  • Jackson 2.6
  • EhCache 2.10
  • JUnit 5
  • Tiles 3

下面列出了受支持的服务器版本:

  • Tomcat 8.5+
  • Jetty 9.4+
  • WildFly 10+
  • Netty 4.1+(用于使用 Spring WebFlux 进行 Web 反应式编程)
  • Undertow 1.4+(用于使用 Spring WebFlux 进行 Web 反应式编程)

使用任何上述早期版本的规范/框架的应用程序需要至少升级到上面列出的版本,才能使用Spring Framework 5.0。

1.5.3 在Spring Framework代码中使用JDK 8 功能#

Spring Framework 4.x 的基准版本为 Java SE 6。这意味着它支持 Java 6、Java 7 和 Java 8。Spring Framework 5.0 的基准版本为 Java 8,所使用的一些 Java 8 功能如下:

  • 核心 Spring 接口中的 Java 8 默认方法;
  • 基于 Java 8 反射增强功能改进的内部代码;
  • 在框架代码中使用函数式编程——lambda 和流。

Java通过Jigsaw实现模块化#

直到 Java 8,Java 平台仍未实现模块化。这导致了如下两个重要问题。

  • 平台臃肿:过去几十年中,Java 模块化一直未受到关注。但是,随着物联网(IOT)和新 型轻量级平台(如 Node.js)的出现,用户迫切需要解决 Java 平台的臃肿问题。(初始版本的 JDK 大小不到 10 MB,最新版本的 JDK 却超过 200 MB。)
  • JAR Hell:另一个重要的问题与 JAR Hell 有关。Java ClassLoader 查找某个类时,不会查看该类是否有其他定义可用,而会立即加载找到的第一个类。如果应用程序的两个不同部分需要不同 JAR 中的同一个类,它们将无法指定要从哪个 JAR 中加载该类。

Jigsaw 将作为 Java 9 的一个组件,帮助 Java应用程序实现模块化,每个模块(称为捆绑包)将定义以下内容。

  • 导入项:模块使用的其他捆绑包。
  • 导出项:此捆绑包导出的包。

每个模块都可以有自己的生命周期。它可以自行安装、启动和停止。

已停用的功能#

除了提高 Java、Java EE 和其他一些框架的基准版本以外,Spring Framework 5.0 还取消了对以下框架的支持:

  • Portlet
  • Velocity
  • JasperReports
  • XMLBeans
  • JDO
  • Guava

如果使用了任何上述框架,建议你制订迁移计划并继续使用 Spring Framework 4.3