向 Spring Framework 5.0 进化
Spring 模块
Spring核心容器
Spring 核心容器提供了 Spring Framework 的核心功能——依赖注入(DI)、IoC(控制反转)容器和应用程序上下文。
下表列出了重要的核心 Spring 模块:
spring-core
其他 Spring 模块使用的实用程序spring-beans
支持 Spring bean;与 spring-core 一起提供 Spring Framework 的核心功能——依赖注入;帮助实现 BeanFactoryspring-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