Spring Framework 5.0耗时两年,终于在9月28日通过Spring官方博客撰文宣告发布第一个GA版本。期间经历1年多的里程碑版本和数个RC版本,现在 5.0.0.RELEASE已正式发布到了repo.spring.io和Maven中央仓库,开发者可以通过Maven或Gradle快速获取和体验:
\\Maven:
\\\\u0026lt;dependencies\u0026gt;\ \u0026lt;dependency\u0026gt;\ \u0026lt;groupId\u0026gt;org.springframework\u0026lt;/groupId\u0026gt;\ \u0026lt;artifactId\u0026gt;spring-context\u0026lt;/artifactId\u0026gt;\ \u0026lt;version\u0026gt;5.0.0.RELEASE\u0026lt;/version\u0026gt;\ \u0026lt;/dependency\u0026gt;\\u0026lt;/dependencies\u0026gt;\
\\
Gradle:
\\\dependencies {\ compile 'org.springframework:spring-context:5.0.0.RELEASE'\}\
\\
快速了解5.0
\\- Spring Framework 5.0新特性\\t
- 迁移到Spring Framework 5.0\\t
- Spring Framework 5 官方FAQ\\t
- 最新的参考文档\\t
- Pieter关于Spring Framework 5.0中反应式编程的全面介绍文章\
新特性简介
\\- 要求JDK 8+和Java EE 7+
\\t整个框架的代码库基于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测试通过。\\t - 移除了的包、类和方法
\\t移除了包beans.factory.access、jdbc.support.nativejdbc、spring-aspects模块中的mock.staticmock、web.view.tiles2以及orm.hibernate3/hibernate4。不再支持Portlet、Velocity、JasperReports、XMLBeans、JDO和 Guava。\\t - 常规核心修订
\\t包括针对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)。\\t - 核心容器
\\t支持 @Nullable注解作为可选注入点声明;函数式GenericApplicationContext/AnnotationConfigApplicationContext;接口方法上的事务、缓存和异步注解一致性探测。\\t - Spring Web MVC
\\t通过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参数。\\t - Spring WebFlux
\\t这是一个全新的模块,作为spring-webmvc的替代方案,基于反应式基础构建——全面异步和非阻塞,它的目的是将其用于事件循环执行模型中,用来替代传统的每个请求对应一个线程的大规模线程池模型;spring-core和spring-web中的反应式支持,比如各种编解码器等;@Controller风格的基于注解的编程模块,与Spring MVC类似,只不过在WebFlux中运行,支持反应式技术栈;新的函数式编程模型(“WebFlux.fn”)也可以替代@Controller,在路由API方面更加轻量和透明,运行在同样的反应式栈和WebFlux基础设施上;新的WebClient,用于函数式和反应式的HTTP API调用。\\t - Kotlin支持
\\t在使用Kotlin 1.1.50以上版本时,支持Null安全的API;使用Kotlin DSL的函数式bean定义。\\t - 测试提升
\\t完整支持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/
感谢张卫滨对本文的审校。