Spring Framework 5.0耗时两年,终于在9月28日通过Spring 官方博客
撰文宣告发布第一个GA版本。期间经历1年多的里程碑版本和数个RC版本,现在 5.0.0.RELEASE已正式发布到了repo.spring.io和Maven中央仓库,开发者可以通过Maven或Gradle快速获取和体验:
Maven:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.0.RELEASE</version>
</dependency>
</dependencies>
Gradle:
dependencies {
compile 'org.springframework:spring-context:5.0.0.RELEASE'
}
快速了解5.0
-
Spring Framework 5.0新特性
-
迁移到Spring Framework 5.0
-
Spring Framework 5 官方FAQ
-
最新的参考文档
-
Pieter关于Spring Framework 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/
感谢张卫滨对本文的审校。
原文
http://www.infoq.com/cn/news/2017/09/spring-framework-5-0-goes-ga