4年前 (2021-05-06)  相关技术 |   抢沙发  1451 
文章评分 1 次,平均分 5.0

Spring Framework 5.0是自2013年12月发布版本4以来Spring框架的第一个主要版本。Spring框架项目负责人juergenhoeller于2016年7月28日宣布发布了第一个Spring框架5.0里程碑(5.0m1)。

我对Spring Framework 5.0中的新特性和增强感到兴奋。

在较高的层次上,Spring Framework 5.0的功能可以分为:

  • JDK基线更新。
  • 核心框架修订。
  • 核心容器更新。
  • 用Kotlin进行函数式编程。
  • 反应式规划模型。
  • 测试改进。
  • 图书馆支持。
  • 停止支持。

Spring Framework 5.0的JDK基线更新

整个springframework5.0codebase运行在java8上。因此,Java8是在SpringFramework5.0上工作的最低要求。

这实际上对框架非常重要。作为开发人员,我们能够享受现代Java版本中的所有新特性。框架本身在支持不推荐使用的Java版本方面背负了很多包袱。

最初,springframework5.0预计将在java9上发布。然而,由于Java9发行版运行了18个多月,Spring团队决定将SpringFramework5.0版本与Java9分离。

然而,当Java9发布(预计在2017年9月发布)时,SpringFramework5.0将准备就绪。

核心框架修订

核心springframework5.0已经过修改,以利用java8中引入的新特性。关键是:

  • 基于Java8反射增强,可以有效地访问SpringFramework5.0中的方法参数。
  • 核心Spring接口现在提供了基于java8默认方法构建的选择性声明。
  • @Nullable@NotNull注释将显式标记可为null的参数和返回值。这允许在编译时处理空值,而不是在运行时抛出NullPointerException。

在日志方面,springframework5.0提供了Commons日志桥接模块,名为springjcl,而不是标准的Commons日志。另外,这个新版本将自动检测Log4j 2.x、SLF4J、JUL(java.util.logging),而不需要任何额外的网桥。

防御性编程也受到了资源抽象的推动,它为getFile方法提供了isFile指示符。

核心容器更新

springframework5.0现在支持候选组件索引作为类路径扫描的替代。此支持已添加到类路径扫描程序中的候选组件标识步骤中。

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

对于少于200个类的小项目,从索引中读取实体而不是扫描类路径并没有显著差异。然而,它对大型项目有重大影响。加载组件索引很便宜。因此,随着类数的增加,索引的启动时间保持不变。

这对我们开发人员意味着,在大型Spring项目上,我们的应用程序的启动时间将大大缩短。虽然20秒或30秒看起来并不多,但当你一天要等那么多时间几十次或几百次的时候,就加起来了。使用组件索引将有助于提高您的日常工作效率。

您可以在Spring的Jira上找到关于组件索引特性的更多信息。

现在,@Nullable注释还可以用作可选注入点的指示符。使用@Nullable使消费者承担了一项义务,即他们必须为值为null做好准备。在此版本之前,实现这一点的唯一方法是通过Android的Nullable、Checker Framework的Nullable和jsr305的Nullable。

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

  • GenericaApplicationContextAnnotationConfigApplicationContext中实现函数式编程风格。
  • 对接口方法上的事务、缓存和异步注释的一致检测。
  • XML配置名称空间朝着未版本化的模式进行了优化。

用Kotlin进行函数式编程

springframework5.0引入了对JetBrains-Kotlin语言的支持。Kotlin是一种支持函数式编程风格的面向对象语言。Kotlin运行在JVM之上,但不限于此。

有了Kotlin支持,开发人员可以深入到函数式Spring编程中,特别是对于函数式Web端点和bean注册。

在Spring Framework 5.0中,您可以为Web functional API编写干净且惯用的Kotlin代码,如下所示:

{
("/movie" and accept(TEXT_HTML)).nest {
GET("/", movieHandler::findAllView)
GET("/{card}", movieHandler::findOneView)
}
("/api/movie" and accept(APPLICATION_JSON)).nest {
GET("/", movieApiHandler::findAll)
GET("/{id}", movieApiHandler::findOne)
}
}

对于bean注册,作为XML或@Configuration@bean的替代方法,现在可以使用Kotlin注册Spring bean,如下所示:

val context = GenericApplicationContext {
registerBean()
registerBean { Cinema(it.getBean()) }
}

反应式编程模型

这个Spring发行版的一个令人兴奋的特性是新的反应式堆栈Web框架。由于它是完全反应的、非阻塞的,所以它适合于事件循环样式的处理,可以用少量线程进行扩展。

Reactive Streams是由Netflix、Pivotal、Typesafe、Red Hat、Oracle、Twitter和Spray.io的工程师开发的API规范。这为要实现的反应式编程实现提供了一个公共API,很像JPA for Hibernate,其中JPA是API,Hibernate是实现。

reactivestreamsapi正式成为java9的一部分。在Java8中,您将需要为reactivestreamsAPI规范包含一个依赖项。

springframework5.0中的流支持是建立在project reactor之上的,projectreactor实现了reactivestreamsapi规范。

springframework5.0有一个新的springwebflux模块,它支持反应式HTTP和WebSocket客户端。springframework5.0还支持在服务器上运行的反应式web应用程序,这些服务器包括REST、HTML和WebSocket样式的交互。

SpringWebFlux中,服务器端有两种不同的编程模型:

  • 基于@Controller的注解和springmvc的其它注解。
  • 使用java8 lambda进行功能风格的路由和处理。

Spring5.0中REST端点的WebClient实现如下:

WebClient webClient = WebClient.create();
Mono person = webClient.get()
.uri("http://localhost:8080/movie/42")
.accept(MediaType.APPLICATION_JSON)
.exchange()
.then(response -> response.bodyToMono(Movie.class));

虽然新的WebFlux模块为我们带来了一些令人兴奋的新功能,但是传统的springmvc仍然在springframework5.0中得到了完全支持。

测试改进

springframework5.0完全支持junit5jupiter在junit5中编写测试和扩展。除了提供一个编程和扩展模型外,Jupiter子项目还提供了一个测试引擎来在Spring上运行基于Jupiter的测试。

此外,springframeworkfive还支持springtestcontext框架中的并行测试执行。

对于反应式编程模型,springtest现在包括WebTestClient,用于集成对springwebflux的测试支持。与MockMvc类似的新WebTestClient不需要运行的服务器。使用模拟请求和响应,WebTestClient可以直接绑定到WebFlux服务器基础结构。

当然,springframework5.0仍然支持我们的老朋友junit4!在撰写本文时,JUnit5即将上市,对JUnit4的支持将在未来的一段时间内与Spring框架配合使用。

库支持

Spring Framework 5.0现在支持以下升级的库版本:

  • Jackson2.6+
  • EhCache 2.10+/3.0加仑
  • Hibernate5.0+
  • JDBC 4.0版+
  • XML单元2.x+
  • OkHttp 3.x+
  • Netty4.1+

中止支持

在API级别,Spring Framework 5.0已停止支持以下包:

  • beans.factory.access访问
  • jdbc.support.nativejdbc
  • springaspects模块的mock.staticmock。
  • web.view.tiles2M。现在Tiles3是最低要求。
  • orm.hibernate3和orm.hibernate4。现在,hibernate5是受支持的框架

Spring Framework 5.0还停止了对以下库的支持:

  • Portlet。
  • Velocity。
  • JasperReports。
  • XMLBeans。
  • JDO。
  • Guava。

如果您使用的是上述任何软件包,建议您继续使用SpringFramework 4.3.x。

小结

Spring Framework 5.0的亮点无疑是反应式编程,这是一个重大的范式转变。您可以将Spring Framework 5.0看作是反应程序的基础版本。在2017年及以后的时间里,您可以看到子项目实现了反应式特性。您将看到Spring数据、Spring安全性、Spring集成等即将发布的版本中添加了响应式编程特性。

Spring数据团队已经实现了对MongoDB和Redis的响应式支持。

现在用JDBC获得反应式支持还为时过早。JDBC规范本身是阻塞的。所以,我们还需要一段时间才能看到传统JDBC数据库的反应式编程。

 

除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/1893.html

关于

发表评论

表情 格式

暂无评论

登录

忘记密码 ?

切换登录

注册