【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

Spring 5.0 GA 版本发布,支持 JDK9 及反应式编程

  • 2017-09-29
  • 本文字数:1898 字

    阅读完需:约 6 分钟

Spring Framework 5.0 耗时两年,终于在 9 月 28 日通过 Spring官方博客撰文宣告发布第一个GA 版本。期间经历1 年多的里程碑版本和数个RC 版本,现在 5.0.0.RELEASE 已正式发布到了repo.spring.io 和Maven 中央仓库,开发者可以通过Maven 或Gradle 快速获取和体验:

Maven:

复制代码
<pre data-anchor-id="im63">
org.springframework spring-context 5.0.0.RELEASE
复制代码

Gradle:

复制代码
<pre data-anchor-id="oo65">

dependencies {
compile ‘org.springframework:spring-context:5.0.0.RELEASE’
}

复制代码

快速了解 5.0

新特性简介

  • 要求 JDK 8+ 和 Java EE 7+
    整个框架的代码库基于 Java 8 源码级别,通过泛型推断和 lambda 等提升了可读性。全面兼容 JDK9,同时支持类路径 classpath 和模块路径 module path;整个框架在 JDK 9 上编译和执行测试用例,默认依然使用 JDK 8。支持 JavaEE 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、jdbc.support.nativejdbc、spring-aspects 模块中的 mock.staticmock、web.view.tiles2 以及 orm.hibernate3/hibernate4。不再支持 Portlet、Velocity、JasperReports、XMLBeans、JDO 和 Guava。
  • 常规核心修订
    包括针对 JDK 8+ 的增强和对 JDK 9 的兼容,包级别的非空 API 声明。5.0 现在有了自己的 Commons Logging 桥接,会自动探测 Log4j 2.x、SLF4J 及 JUL (java.util.logging),不再需要外部的桥接程序。spring-core 自带 ASM6.0(同时还包括 CGLIB 3.2.5 和 Objenesis 2.6)。
  • 核心容器
    支持 @Nullable 注解作为可选注入点声明;函数式 GenericApplicationContext/AnnotationConfigApplicationContext;接口方法上的事务、缓存和异步注解一致性探测。
  • Spring Web MVC
    通过 Spring 自带的 Filter 实现全面支持 Servlet 3.1;controller 方法中支持 Servlet 4.0 的 PushBuilder 参数;针对 Servlet 3.0 multipart 解析时增加 MaxUploadSizeExceededException 类型异常;不可变对象的数据绑定支持(Kotlin / Lombok / @ConstructorProperties);支持 JSON 绑定 API(Jackson 和 GSON 的替代方案),支持 Jackson 2.9 和 Protubuf 3;支持 Reactor 3.1;Flux、Mono 以及 RxJava 3.1 和 2.1 都可以作为 controller 方法的返回值,以便适应新的反应式 WebClient 或者 Spring Data Reactive repositories;新的 ParsingPathMatcher 替代 AntPathMatcher,解析效率更高;@ExceptionHandler 方法支持 RedirectAttributes 参数。
  • Spring WebFlux
    这是一个全新的模块,作为 spring-webmvc 的替代方案,基于反应式基础构建——全面异步和非阻塞,它的目的是将其用于事件循环执行模型中,用来替代传统的每个请求对应一个线程的大规模线程池模型;spring-core 和 spring-web 中的反应式支持,比如各种编解码器等;@Controller 风格的基于注解的编程模块,与 Spring MVC 类似,只不过在 WebFlux 中运行,支持反应式技术栈;新的函数式编程模型(“WebFlux.fn”)也可以替代 @Controller,在路由 API 方面更加轻量和透明,运行在同样的反应式栈和 WebFlux 基础设施上;新的 WebClient,用于函数式和反应式的 HTTP API 调用。
  • Kotlin 支持
    在使用 Kotlin 1.1.50 以上版本时,支持 Null 安全的 API;使用 Kotlin DSL 的函数式 bean 定义。
  • 测试提升
    完整支持 JUnit 5 的 Jupitre 编程和 Spring TestContext Framework 的扩展模型;支持并行测试执行;新的 before 和 after 测试执行回调,包括 TestNG,JUnit 5 和使用 SpringRunner 的 JUnit 4(但不支持 JUnit 4 规则);MockHttpServletRequest 现在增加了 getContentAsByteArray() 和 getContentAsString() 方法来访问内容;Spring MVC Test 中的 print() 和 log() 方法能够打印 Mock 请求中的消息体,redirectedUrl() 和 forwardedUrl() 方法能够通过变量扩展支持 URI 模板;对 XMLUnit 的支持升级到了 2.3 版本。

参考链接

官方博客: https://spring.io/blog/2017/09/28/spring-framework-5-0-goes-ga
项目主页: http://projects.spring.io/spring-framework/
源码获取: https://github.com/spring-projects/spring-framework/

感谢张卫滨对本文的审校。

2017-09-29 22:075627

评论

发布
暂无评论
发现更多内容

区块链技术发展及应用:现状与挑战

CECBC

区块链

2月日更挑战|达标抽奖季,更有暖春大满足礼包等你来

InfoQ写作社区官方

2月春节不断更 热门活动

《程序员修炼之道》- 解决问题,而不是去责备(6)

石云升

程序员 bug修复 28天写作

产品 0 期 - 第三周作业

vipyinzhiwei

关于微信8.0的一些社交小心思

静陌

微信 张小龙 社交

同城快递架构设计

Mars

读2020年Javascript趋势报告展望ES2020

devpoint

大前端 ES2020 构建工具

Spring 动态代理时是如何解决循环依赖的?为什么要使用三级缓存?

程序员小航

spring 源码

2021年,开发者的落日

王知无

大数据

航运业“搭台” 区块链“唱戏”

CECBC

航运

week10-总结

J

技术创业,股权设置的常见“坑” | 视频号28天(24)

赵新龙

28天写作

聊聊我的原创维权二三事

架构精进之路

自我思考 七日更 28天写作

Apache老母鸡又下蛋?一文俯瞰Apache Superset

王知无

大数据

week10-homework

J

VS +QT 手动添加Q_OBJECT 报错问题解决

Creep

c++ qt

Mybatis【17】-- Mybatis自关联查询一对多查询

秦怀杂货店

数据库 mybatis

我看好数据湖的未来,但不看好数据湖的现在

王知无

大数据 数据湖

架构师训练营 - 第五周作业

Mark

第十周 模块分解 作业 「架构师训练营 3 期」

胡云飞

发布 Go Modules

Rayjun

go modules Go 语言

区块链隐私保护、体系结构与智能合约研究

CECBC

区块链

企业是如何解决HDFS单点问题的?

大数据老哥

大数据 hadoop

用helm chart将chripstack部署到kubernetes之上

远鹏

Kubernetes IoT Helm ChirpStack LoraWan

【计算机内功修炼】八:函数运行时在内存中是什么样子?

码农的荒岛求生

高并发 内存 高性能 内存管理 运行时栈帧

Reactive Spring实战 -- 响应式Redis交互

binecy

redis Reactive Spring

VS2019 + Qt Creator 4.11.1 导入Qt源码进行调试记录

Creep

c++ qt

数据结构和算法学习总结-复杂度分析

Nick

时间复杂度 数据结构与算法 复杂度

Elasticsearch document routing 数据路由

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

欢度春节|话题王者 VS 互动先锋(第二季)

InfoQ写作社区官方

话题讨论 热门活动

产品 0 期 - 第三周作业

Jxin

Spring 5.0 GA版本发布,支持JDK9及反应式编程_Java_杨振涛_InfoQ精选文章