Java 9 来了,还带来一大波...

| September 22, 2017

发布

2017年9月21日,在几次推迟之后,Java9终于发布了。发布说明: http://mail.openjdk.java.net/pipermail/announce/2017-September/000230.html

带来了推迟了数年之久的关键特性–模块化功能。https://mreinhold.org/blog/jigsaw-complete 里面详细的进行了说明。

下月初JavaOne大会将会在美国召开,届时所有Java开发者都会沉浸在一种节日的快乐中,不仅仅是因为刚发布了新的Java大版本9,而是迎来了一系列的Java生态中重量级产品和项目。

我仔细回想,集中在一个月内发布这么多有重大影响力的技术产品,这的确是头一次,一定要写些文字来记录。

Java9

首先,最重要的是Java9的发布。这个大的版本中,除了模块化特性以外,在语法上特别瞩目的改进其实不是很多;然而Jdk的打包结构发生了很大的变化,原有的rt.jar被移除,而加入各个模块jmod。这个变化也可以引出我个人认为第二重要的变化:即Jaotc的支持,可以使用jlink编译成本地二进制包,这个特性对于cloud native非常重要。其他重要的特性有jShell,多版本的jar,HTTP/2的支持,安全加密算法的众多改进等等。

Java9也许是最后一个以单个自然数为版本号的Java版本,在已经公开的JSR383草案中,就已经提出今后Java的版本号将采用年+月的命名方式,即下一个Java版本号为18.3。类似于Ubuntu Linux,采用3年一个LTS长期支持版的发布方式。我非常看好这种方式,这样既能满足了企业用户需要稳定和商业支持的版本需求,又可以按照市场的需要,每半年快速的发布具有新特性的Java版本。

在开源方面,前两天IBM把其JDK实现J9,捐献给Eclipse组织,并命名为OpenJ9开源项目。另外之前JFR(Java Flight Recorder)也宣布将会开源,开放时间最早可能会在Java10(18.3)时。

JavaEE 8

其次,JavaEE 8 也正式发布。Oracle在官网进行提供了JavaEE SDK(含Glassfish5)下载。 链接为 http://www.oracle.com/technetwork/java/javaee/downloads/index.html

之前在JCP网站上,就已经有了所有的规范最终文档和API定义。本次JavaEE 8 重大的更新有CDI2, Servlet4,BV2,新的Security规范等。 其中大多数子规范的参考实现,如Weld3,Hibernate Validation6等早已经发布(除了Tomcat9还处在M26版本)。

上周,Oracle公司把JavaEE转让给了Eclipse组织,包括文档,TCK,接口定义,Glassfish参考实现等等。也就是说未来不会再有由大型软件公司起主导作用的JavaEE9。JavaEE未来的发展,将通过开源社区来完成。请参考博文 JavaEE开放之路

Spring 5

第三,Pivotal将在9月底发布SpringFramework5(以下简称Spring5)。通过Reactor项目定义的响应式接口,Spring5可以异步获取所需要的数据,提升软件系统整体的运行效率。与此同时,几乎所有的Spring系列框架和项目,都在准备发布新的大版本,包括SpringBoot,SpringCloud,SpringSecurity,SpringData,SpringBatch,SpringIntegration等等。可以说是Spring系的一次全面更新!

这两年随着微服务技术的火爆,SpringBoot成为Java语言构建微服务的首选开源框架。SpringBoot2主要加入的功能也是利用响应式接口来异步获取数据。预计SpringBoot2会到年底前发布。

JUnit5

第四,经典测试框架JUnit发布了新一代版本5,对原有的JUnit结构做出非常大的改进。

JUnit5采用Platform+Jupiter+Vintage这样的体系,Platform是基础层,Jupiter利用Java8提供的函数化编程能力进行单元测试,Vintage则提供Junit4之前的兼容接口。

Junit5对于软件测试的更新意义将是巨大的。我们知道,当年的TDD和敏捷编程运动,使软件开发时进行测试需要面向接口编程和大量使用依赖注入,直接导致了AOP,Spring框架等出现,以及促使EJB3和后来JavaEE6的全面演进。

而今天的JUnit5的出世,将会使开发者更多的面向函数和不变集合,对异步响应式接口进行编程。Spring5是在适应这个变化了,在web和数据访问层已经加入了对应的接口和能力。JavaEE8目前处于落后状态,只在JPA2.2维护版加入了对Stream的支持;JSR371定义的MVC在今年4月从JCP转出到社区后,并没有很活跃,也许今后也可以加入相应的支持。

总结

综上所述,我们可以看的出,这些Java产品大的更新,对于实际的项目开发来说,最核心在于Java8之中的函数式编程和异步响应式接口的运用。

是的,我没有写错,是Java8而不是Java9。除了Java9本身,其他的几大更新都是围绕着适应Java8的技术展开的。

目前国内很多企业还都在以Java6作为开发基础,这次则是一个很好的契机,全面进行技术升级换代。我个人的建议是企业基础平台使用稳定的JDK8版本,而如果构建微服务架构,则可以激进些,使用最新的JDK9并使用模块化特性进行组件间的隔离。

接下来我将利用空闲时间写一系列的文章,对这些重大发布的关键特性进行技术描述:包括Java8/9,JavaEE8,Spring5,Junit5,以及JBoss的一些项目的重要更新。也为Java新技术推广普及尽微薄之力。

欢迎关注!

列表

JDK

  • Java 函数化支持之新的基石Lambda
  • Java 数据流通道Stream
  • Java 多线程异步操作之CompletableFuture/Flow
  • Java9 核心Module System
  • Java 获取本地计算能力JLink/Jatoc
  • Java 时间的更新和同JodeTime的差异

JavaEE

  • Servlet4 内部用HTTP/2焕然一新
  • CDI2 面向对象之王者归来
  • BeanValidation2 贯穿技术栈验证能力

Spring

  • Spring5/Reactor3 Java领域今年最耀眼的技术更新
  • SpringBoot2 这两年最火爆的微服务技术
  • SpringCloud DataFlow 处理数据和微服务框架配合之未来的方向

Other

  • JUnit5 第三方库首席之重大更新
  • Vertx3.5 一支阻击其他语言的Java小分队
  • wildfly-swarm 很受冷遇但金子总是会发光的