`
男人50
  • 浏览: 242218 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

Spring Framework 5.0 新特性

 
阅读更多
Spring Framework 5.0 是自 2013年12月版本 4 发布之后 Spring Framework 的第一个主发行版。Spring Framework 项目的领导人 Juergen Hoeller 于 2016 年 7 月 28 日宣布了第一个 Spring Framework 5.0 里程碑版本(5.0 M1)。

现在,将近一年的时间过去以后,我们期盼已久的 RC3 版本将于 2017 年 7 月 18 日发行。这是路线图规划中 Spring Framework 5.0 首个 GA 发行版的最后一次发行。

从高层来看,Spring Framework 5.0 的功能可以分为:


JDK 基线更新


核心框架修正


核心容器更新


含 Kotlin 在内的函数式编程


响应式编程模型


测试改进


库支持


中止支持


Spring Framework 5.0 的 JDK 基线更新


整个 Spring framework 5.0 代码库运行于 Java 8 之上。因此 Spring Framework 5.0 对环境的最低要就就是 Java 8。

这一点实际上对框架而言非常重要。而作为开发者的我们而言,则已经能够去藉此来享受到现代 Java 发行版中的所有新特性了。而框架版本还背负这支持已经不被建议使用的 Java 发行版的任务。

现在,框架的最低要求是 Java 8.

Spring Framework 5.0 原来是计划在 Java 9 之上发行的。然后,在基于 Java 9 的发行版运作了超过 18 个月之后, Spring 团队决定将 Spring Framework 5.0 发行版同 Java 9 的绑定关系解除。

不过,在 Java 9 发布的时候(计划是2017年9月份), Spring Framework 5.0 会准备好的。

核心框架修订


核心的 Spring Framework 5.0 已经利用 Java 8 所引入的新特性进行了修订。比较关键的一些如下:

基于 Java 8 的反射增强,  Spring Framework 5.0 中的方法参数可以更加高效的进行访问。


核心的 Spring 接口现在提供基于Java 8 的默认方法构建的选择性声明。


用 @Nullable 和 @NotNull 注解来显示表明可为空的参数和以及返回值。这样就够在编译的时候处理空值而不是在运行时抛出 NullPointerExceptions。


在日志记录方面, Spring Framework 5.0 带来了 Commons Logging 桥接模块的封装, 它被叫做 spring-jcl 而不是标准的 Commons Logging。当然,无需任何额外的桥接,新版本也会对 Log4j 2.x, SLF4J, JUL ( java.util.logging) 进行自动检测。

有了 Resourse 抽象所提供的 isFile 指示器以及 getFile 方法,防御式编程方法也得到了框架的推动。

核心容器更新


Spring Framework 5.0 现在支持候选组件索引作为类路径扫描的替代方案。该功能已经在类路径扫描器中添加,以简化添加候选组件标识的步骤。

应用程序构建任务可以定义当前项目自己的 META-INF/spring.components 文件。在编译时,源模型是自包含的,JPA 实体和 Spring 组件是已被标记的。

从索引读取实体而不是扫描类路径对于小于 200 个类的小型项目是没有明显差异。但对大型项目影响较大。加载组件索引开销更低。因此,随着类数的增加,索引读取的启动时间将保持不变。

加载组件索引的耗费是廉价的。因此当类的数量不断增长,加上构建索引的启动时间仍然可以维持一个常数, 不过对于组件扫描而言,启动时间则会有明显的增长。

这个对于我们处于大型 Spring 项目的开发者所意味着的,是应用程序的启动时间将被大大缩减。虽然 20 或者 30 秒钟看似没什么,但如果每天要这样登上好几百次,加起来就够你受的了。使用了组件索引的话,就能帮助你每天过的更加高效。

你可以在 Spring 的 Jira上了解更多关于组件索引的相关信息。

@Nullable 注解现在也可以被用来作为可选注入项的指示器。@Nullable 为对象使用方规定了一项义务,就是它们必须准备以为取值为 null 的值。在此次发布之前,实现这件事情的唯一方法就是通过 Android 的 Nullable, Checker Framework 的 Nullable, 以及 JSR 305 的 Nullable。

发行说明中的其他一些新功能和增强功能包括:


在 GenericApplicationContext 和 AnnotationConfigApplicationContext 中实现函数式编程风格。


对接口方法的事务、缓存和异步注释的一致性检测。


将 XML 配置命名空间简化为无版本化的模式。


使用 Kotlin 进行函数式编程


Spring Framework 5.0 引入了对 JetBrains Kotlin 语言的支持。Kotlin 是一种支持函数式编程编程风格的面向对象语言。Kotlin 运行在 JVM 之上,但运行环境并不限于 JVM。

有了对 Kotlin 的支持,开发者可以进行深度的函数式 Spring 编程,特别是在函数式 Web 端点以及 Bean 注册这些方面。

在 Spring Framework 5.0 中, 你可以为 WEB 的函数式 API 编写干净且地道的 Kotlin 代码,就像下面这样:





01
{



02
("/movie" and accept(TEXT_HTML)).nest {



03
GET("/", movieHandler::findAllView)



04
GET("/{card}", movieHandler::findOneView)



05
}



06
("/api/movie" and accept(APPLICATION_JSON)).nest {



07
GET("/", movieApiHandler::findAll)



08
GET("/{id}", movieApiHandler::findOne)



09
}



10
}

对于 Bean 的注册,作为 XML 或者 @Configuration 以及 @Bean 的替代办法, 现在你可以使用 Kotlin 来注册 Spring Bean了,就像下面这样:





1
val context = GenericApplicationContext {



2
registerBean()



3
registerBean { Cinema(it.getBean()) }



4
}

点击这里了解我的新的 Spring Framework 5 课程的相关信息!

响应式编程模型


此次 Spring 发行版本的一个激动人心的特性就是新的响应式堆栈 WEB 框架。这个堆栈完全的响应式且非阻塞,适合于事件循环风格的处理,可以进行少量线程的扩展。

Reactive Streams 是来自于 Netflix, Pivotal, Typesafe, Red Hat, Oracle, Twitter 以及 Spray.io 的工程师特地开发的一个 API。它为响应式编程实现的实现提供一个公共的 API,好实现 Hibernate 的 JPA。这里 JPA 就是这个 API, 而 Hibernate 就是实现。

Reactive Streams API 是 Java 9 的官方版本的一部分。在 Java 8 中, 你会需要专门引入依赖来使用 Reactive Streams API。

Spring Framework 5.0 对于流式处理的支持依赖于 Project Reactor 来构建, 其专门实现了 Reactive Streams API。

Spring Framework 5.0 拥有一个新的 spring-webflux 模块,支持响应式 HTTP 和 WebSocket 客户端。Spring Framework 5.0 还提供了对于运行于服务器之上,包含了 REST, HTML, 以及 WebSocket 风格交互的响应式网页应用程序的支持。

在 spring-webflux 中包含了两种独立的服务端编程模型:

基于注解:使用到了@Controller 以及 Spring MVC 的其它一些注解;


使用 Java 8 lambda 表达式的函数式风格的路由和处理。


有了 Spring Webflux, 你现在可以创建出 WebClient, 它是响应式且非阻塞的,可以作为 RestTemplate 的一个替代方案。

这里有一个使用 Spring 5.0 的 REST 端点的 WebClient 实现:





1
WebClient webClient = WebClient.create();



2
Mono person = webClient.get()



3
.uri("http://localhost:8080/movie/42")



4
.accept(MediaType.APPLICATION_JSON)



5
.exchange()



6
.then(response -> response.bodyToMono(Movie.class));

尽管新的 WebFlux 模块给我么带来了激动人心的新能力,传统的 Spring MVC 在  Spring Framework 5.0 仍然得到了完整的支持。

测试方面的提升


Spring Framework 5.0 完全支持 JUnit 5 Jupiter,所以可以使用 JUnit 5 来编写测试以及扩展。此外还提供了一个编程以及扩展模型,Jupiter 子项目提供了一个测试引擎来在 Spring 上运行基于 Jupiter 的测试。

另外,Spring Framework 5 还提供了在 Spring TestContext Framework 中进行并行测试的扩展。

针对响应式编程模型, spring-test 现在还引入了支持 Spring WebFlux 的 WebTestClient 集成测试的支持,类似于 MockMvc,并不需要一个运行着的服务端。使用一个模拟的请求或者响应, WebTestClient 就可以直接绑定到 WebFlux 服务端设施。

你可以在这里找到这个激动人心的 TestContext 框架所带来的增强功能的完整列表。

当然, Spring Framework 5.0 仍然支持我们的老朋友 JUnit! 在我写这篇文章的时候, JUnit 5 还只是发展到了 GA 版本。对于 JUnit4, Spring Framework 在未来还是要支持一段时间的。

库支持


Spring Framework 5.0目前支持以下升级库的版本 :

Jackson 2.6+


EhCache 2.10+ / 3.0 GA


Hibernate 5.0+


JDBC 4.0+


XmlUnit 2.x+


OkHttp 3.x+


Netty 4.1+


中止的支持


在 API 层面,Spring Framework 5.0 不再支持以下包:

beans.factory.access


jdbc.support.nativejdbc


spring-aspects 模块的 mock.staticmock


web.view.tiles2M.(最低要求 Tiles 3)


orm.hibernate3 和 orm.hibernate4. 目前 Hibernate 5 是支持的框架。


Spring Framework 5.0 同时也停止了对以下库的支持:

Portlet.


Velocity.


JasperReports.


XMLBeans.


JDO.


Guava.


如果你正在使用任何上面的包,建议你将 Spring Framework 版本维持在 4.3.x。

结语


Spring Framework 5.0 的亮点绝对是响应式编程,这是一个重要的范式转变。你可以将 Spring Framework 5.0 作为响应式程序的基础版本。对于 2017 年及以后的剩余时间里,你可以期待看到子项目实现响应式特性。你将看到即将发布的 Spring Data、Spring Security、Spring Integration 等版本所提供的响应式编程功能。


Spring Data 团队已经为 MongoDB 和 Redis 实现了响应式支持。
使用 JDBC 获取响应式支持还为时过早。JDBC 规范本身就是阻塞的,在传统的 JDBC 数据库中看到响应式编程的还需要一段时间。
虽然响应式编程是 Spring Framework 5.0 中的闪光点,但它不会在任何地方得到支持。 下游技术需要提供响应式支持。
随着响应式编程越来越受欢迎,我们可以期待越来越多的技术将实现响应式解决方案。 当然,我们可以期待 Spring 框架随着其他的响应式编程方案的使用而发展
1
0
分享到:
评论

相关推荐

    SpringFramework5.0.x源码学习笔记.pdf

    这份源码学习笔记以SpringFramework 5.0.x版本为核心,详细地记录了通过debug方法学习Spring框架中的两个核心特性:控制反转(IoC)和面向切面编程(AOP)的实现原理。 首先,要学习Spring Framework 5.0.x的源码,...

    springframework5.0.zip

    综上所述,"springframework5.0.zip"压缩包包含了Spring Framework 5.2.2.RELEASE的完整文档和源码,是学习和使用Spring Framework的重要资源。通过深入研究和实践,开发者可以充分利用Spring Framework的强大功能,...

    官网下载的完整spring5.0的jar包.rar

    Spring5.0作为其一个重要版本,引入了许多新特性和改进,旨在提高开发者效率和应用性能。这个"官网下载的完整spring5.0的jar包.rar"包含了Spring框架的所有核心组件和资源文件,对于学习和开发基于Spring的应用程序...

    spring-framework-5.0.x.zip

    Spring Framework作为Java领域最广泛应用的轻量级框架之一,其5.0.x版本的发布带来了许多新特性和改进,为开发者提供了更高效、更灵活的开发体验。本篇文章将深入探讨Spring Framework 5.0.x的核心特性,源码解析...

    spring-framework-5.0.zip

    Spring框架为现代基于Java的企业应用程序提供了一个全面的编程和配置模型 - 在任何类型的部署平台上。 Spring的一个关键元素是应用程序级别的基础架构支持:Spring...这里提供了spring-framework-5.0.x.zip所有jar包

    spring-framework-5.0.14.RELEASE.zip

    4. Java 8兼容性:全面支持Java 8的新特性,如Lambda表达式、Stream API等,提升了代码的简洁性和可读性。 5. WebFlux框架:Spring 5.0引入了全新的WebFlux框架,提供了反应式编程模型,适用于低延迟、高吞吐量的...

    SpringFramework_v5.0.7.zip

    Spring Framework 是一个开源的Java/Java EE全功能栈(full-stack)的应用程序...此外,值得注意的是,整个 Spring Framework 5.0 代码库运行于 Java 8 之上。因此 Spring Framework 5.0 对环境的最低要求是 Java 8。

    Spring Framework v5.0.11

    Spring Framework 是一个开源的Java/Java EE全功能栈(full-stack)的应用程序...此外,值得注意的是,整个 Spring Framework 5.0 代码库运行于 Java 8 之上。因此 Spring Framework 5.0 对环境的最低要求是 Java 8。

    spring-framework-5.0 中文文档PDF

    Spring Framework 5.0是Spring大家族中的一个核心框架版本,它支持了Java 8及以上版本中的众多特性,比如Lambda表达式和函数式编程。Spring Framework 5.0的中文文档PDF是学习和参考该框架的重要资源,其内容涵盖了...

    Spring-framework-5.0.x官方源码

    Spring 5.0.x 版本是该框架的一个重要里程碑,引入了许多新特性和改进,旨在提升性能、简化开发流程以及支持最新的Java和Web技术。 在Spring Framework 5.0.x中,以下几个核心知识点值得深入探讨: 1. **模块化...

    v5.0.7Spring Framework

    Spring Framework 是一个开源的Java/Java EE全功能栈(full-stack)的应用程序...此外,值得注意的是,整个 Spring Framework 5.0 代码库运行于 Java 8 之上。因此 Spring Framework 5.0 对环境的最低要求是 Java 8。

    Spring_Framework_ API_5.0.5 (CHM格式)

    响应式编程是 SpringFramework5.0 最重要的特性之一。响应式编程提供了另一种编程风格,专注于构建对事件做出响应的应用程序。 SpringFramework5 包含响应流(定义响应性API的语言中立尝试)和 Reactor(由Spring ...

    Spring Framework 应用程序框架 v5.3.26

    Spring Framework 是一个开源的Java/Java EE全功能栈(full-stack)的应用程序...此外,值得注意的是,整个 Spring Framework 5.0 代码库运行于 Java 8 之上。因此 Spring Framework 5.0 对环境的最低要求是 Java 8。

    spring-framework-5.1.x.zip

    Spirng的 github 主页 https://github.com/spring-projects/spring-framework。...此外,值得注意的是,整个 Spring Framework 5.0 代码库运行于 Java 8 之上。因此 Spring Framework 5.0 对环境的最低要求是 Java 8。

Global site tag (gtag.js) - Google Analytics