基于 Java 8 源代码级别的完整框架代码
通过引入泛型、lambda 等提高可读性。
通过直接代码支持 Java 8 功能的条件支持。
方便开发和部署的目的,完全兼容 JDK 9。
在 classpath 和模块路径上(支持稳定自动模块名)。
框架构建和测试组件在 JDK 9 上也支持 (默认情况运行在 JDK 8 之上)。
目前 Spring 相关功能需要 Java EE 7 API 级。
Servlet 3.1, Bean Validation 1.1, JPA 2.1, JMS 2.0
近期的服务器: 例如 Tomcat 8.5+, Jetty 9.4+, WildFly 10+
运行时兼容 Java EE 8 API 级。
Servlet 4.0, Bean Validation 2.0, JPA 2.2, JSON Binding API 1.0
在 Tomcat 9.0, Hibernate Validator 6.0, Apache Johnzon 1.1 已测试
包名 beans.factory.access(BeanFactoryLocator 机制)。
包名 jdbc.support.nativejdbc (NativeJdbcExtractor 机制)。
从 spring-aspects 移除 mock.staticmock 包 。
不再支持 AnnotationDrivenStaticEntityMockingControl。
删除包 web.view.tiles2 和包 orm.hibernate3/hibernate4。
最低要求: Tiles 3 和 Hibernate 5。
不再支持的部分: Portlet, Velocity, JasperReports, XMLBeans, JDO, Guava。
推荐:如果需要维持现有的 Spring Framework 4.3.x。
在代码库中移除诸多遗弃的类和方法。
在生态系统中对于常用的方法作了少数折中。
JDK 8+ 增强:
基于 Java 8 反射增强的高效方法参数访问。
核心 Spring 接口中 Java 8 默认方法的选择性声明。
使用 JDK 7 Charset 和 StandardCharsets 增强功能。
JDK 9 兼容性:
尽可能避免 JDK 9 中不推荐使用的 JDK API。
通过构造函数实现一致性实例化(修改异常处理)。
避免将反射机制应用在核心的 JDK 类上
包级别的非空 API 声明:
使用 @Nullable 显式注释的可空参数,字段和返回值。
主要用于 IntelliJ IDEA 和 Kotlin,还有 Eclipse 和 FindBugs。
一些 Spring API 不再容许空值(例如 StringUtils)。
Resource 为防御性 getFile 访问提供 isFile 指示。
Resource 接口中还包含基于 NIO 的可读通道访问器。
通过 NIO.2 流文件系统访问(不再使用 FileInput / OutputStream)。
Spring Framework 5.0 自带的 Commons Logging bridge 开箱即用:
spring-jcl 替代标准的 Commons Logging;仍然可排除/可覆盖。
自动检测 Log4j 2.x,SLF4J,JUL(java.util.logging),而无需额外的桥接。
spring-core 随附 ASM 6.0(计 CGLIB 3.2.5 和 Objenesis 2.6 之后)。
支持任意 @Nullable 注释作为标识符,用于作为可选注入点。
在 GenericApplicationContext/AnnotationConfigApplicationContext 上支持函数式风格
使用 bean 定义的可定制回调的基于 Supplier 的 bean 注册 API。
在接口方法上持续监测 transaction, caching, async 注释。
在 CGLIB 代理的情况下。
简化的无版本化 schema 的 XML 配置命名空间 。
总是解析最新的 xsd 文件;不支持遗弃的功能。
版本相关声明依然支持,但需要使用最新的 schema 验证。
支持候选组件索引(作为 classpath 扫描的替代项)。
在 Spring 提供的 Filter 实现中完全全支持 Servlet 3.1 特性。
在 Spring MVC 控制器方面中支持 Servlet 4.0 的 PushBuilder 参数。
在常见服务器上支持 Servlet 3.0 的 MaxUploadSizeExceededException 解析 multipart。
通过 MediaTypeFactory 委托统一支持常见媒体类型。
取代 Java Activation Framework。
使用不可变对象进行数组绑定 (Kotlin / Lombok / @ConstructorProperties)
支持绑定 JSON 的 API(代替 Jackson 和 GSON)。
支持 Jackson 2.9。
支持 Protobuf 3。
为了在 Spring MVC 控制器中使用新的响应式 WebClient(见下面)或者 Spring Data Reactive 库,Spring MVC 控制器方法允许返回 Reactor 3.1 Flux 和 Mono,以及 RxJava 1.3 和 2.1。
新的 ParsingPathMatcher 代替 AntPathMatcher,带来更高效的解析和 扩展语法 。
@ExceptionHandler 方法允许 RedirectAttributes 参数(还有快速属性)。
支持 ResponseStatusException 代替 @ResponseStatus。
通过直接使用 ScriptEngine#eval(String, Bindings) 渲染脚本来支持未实现 Invocable 的脚本引擎,还通过 RenderingContext 参数支持国际化(i18n)和 ScriptTemplateView 的嵌入模板。
Spring 的 FreeMarker 宏 (spring.ftl) 现在使用 HTML 作为输出格式(需要 FreeMarker 2.3.24+)。
新的 spring-webflux 模块基于异步、非阻塞的 响应式编程 ,用来代替 spring-webmvc。与传统的每个请求使用巨大线程池中一个线程的模式不同,响应式编程采用事件循环执行的模型。
spring-core 中的响应式基建包括 Encoder 和 Decoder 用于对对象流进行编码和解码;DataBuffer 抽象,比如 Java 的 ByteBuffer 或 Netty 的 ByteBuf;控制器方法签名中的 ReactiveAdapterRegistry 支持响应库。
spring-web 中的响应式基建包括 HttpMessageReader 和 HttpMessageWriter,它们基于 Encoder 和 Decoder 创建,并成为其代表;服务器 HttpHandler 适配像 Servlet 3.1+ 容器、Netty 和 Undertow 这样的(非阻塞)运行时;WebFilter、WebHandler 和其它非阻塞协议作为 Servlet API 的等价替代品。
@Controller 风格,基于注解的编程模式,与 SprintMVC 相似,但受到 WebFlux 支持,运行于响应栈,比如,它可以支持的响应类型包括控制器方法参数,不阻塞 I/O,关注到 HTTP 套接字的全路径背压,运行在额外的非 Servlet 容器,比如 Netty 和 Undertow。
新的 函数式编程模型 (“WebFlux.fn”)可代替 @Controller,基于注解的编程模型——最小而且透明的终端路由 API,运行于相同的响应栈和 WebFlux 架构。
新的 WebClient 支持在调用 HTTP 时使用函数式编程和响应式 API,能与通过 Fluent API 实现的 RestTemplate 媲美,还擅长基于 WebFlux 架构的非阻塞和流模式;5.0 中已经不推荐使用 AsyncRestTemplte 而应该使用 WebClient。
使用 Kotlin 1.1.50+ 的支持空安全的 API。
支持带可选参数和默认值的 Kotlin 不可变类。
函数式 Bean 定义 Kotlin DSL。
为 WebFlux 支持函数式路由到 Kotlin DSL。
利用 Kotlin 具体的类型参数,在各种 API 中,比如 RestTemplate 和 WebFlux API,显式指定用于序列化/反序列化的类。
Kotlin 空安全支持 @Autowired/@Inject 和 @RequestParam/@RequestHeader 等注解,这样可以检查参数 /Bean 是否是必需的。
Kotlin 脚本在 ScriptTemplateView 中得到 Spring MVC 和 Spring WebFlux 的支持。
为 Model、ModelMap 和 Environment 添加了类似数组的 setter。
为 Kotlin 自动绑定构造器参数提供可选参数的支持。
使用 Kotlin 反射来确定接口方法参数。
在 Spring TestContext 框架中完全支持 JUnit 5 的 J upiter 编程及其扩展模型
SpringExtension : 来自 JUnit 的多个扩展 API 的实现,它提供了 Spring TestContext 框架中现有功能集的全部支持。这些支持是通过 @ExtendWith(SpringExtension.class 使能的。
@SpringJUnitConfig : 整合来自 JUnit Jupiter 的 @ExtendWith(SpringExtension.class) 与 Spring TestContext 框架的@ContextConfiguration 的复合注解。
@SpringJUnitWebConfig : 整合来自 JUnit Jupiter 中的 @ExtendWith(SpringExtension.class) 与来自 Spring TestContext 框架的 @ContextConfiguration 和 @WebAppConfiguration 的复合注解。
@EnabledIf : 表示被注解的测试类或测试方法在以下条件是使能的:补充 SpEL 表达式或属性占位符被设置为 true。
@DisabledIf : 表示被注解的测试类或测试方法在以下条件是禁用的:补充 SpEL 表达式或属性占位符被设置为 true。
支持 Spring TestContext 框架总的 并行测试执行 。
Spring TestContext 框架中新版的 before 和 after 测试执行回调通过 SpringRunner(注意不是通过 JUnit 4 规则)支持 TestNG、JUnit 5 以及 JUnit 4。
在 TestExecutionListener API 和 TestContextManager 中新添加 beforeTestExecution() 和 afterTestExecution() 回调。
MockHttpServletRequest 现在有 getContentAsByteArray() 和 getContentAsString() 方法,可用于访问其内容(例如,请求主体)。
如果字符集编码格式已经在 mock 请求中设置,则 Spring MVC 测试中的 print() 和 log() 方法现在将打印请求主体。
Spring MVC 测试中的 redirectedUrl() 和 forwardedUrl() 方法现在支持 URI 模板,并支持变量扩展。
XMLUnit 支持升级到 2.3 版本。