专栏名称: 技术最前线
最新技术和业界动态,就在技术最前线
目录
相关文章推荐
51好读  ›  专栏  ›  技术最前线

Spring Framework 5.0 新特性有这些

技术最前线  · 公众号  · 科技媒体  · 2017-07-06 19:56

正文

(点击 上方公众号 ,可快速关注)


转自:开源中国


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 代码,就像下面这样


{

( "/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







请到「今天看啥」查看全文


推荐文章
悦网美文日赏  ·  不读《思美人》,不懂屈原
7 年前
新疆949交通广播  ·  汽车号牌将发生大变化!速看长啥样!
7 年前
经典短篇阅读小组  ·  跟现实妥协是中年人的事
7 年前