Java 9:代码语法更新

更新

2017.10的某天,Oracle发布了Java 9 ,Java 9的语言只更新了一小部分(jshell 除外),下面是一些简单的解读.Oracle的原文地址在这:访问原文

java标志

更新的部分

代码务必在Java 9环境中尝试,不然会编译报错.

一共更新了大概5个部分的语法更新,记录如下.

try自动关闭资源优化

实现了AutoCloseable或者Closeable接口的类,可以用try实现自动关闭资源,在JDK中的FileReader,FileInputStream,FileOutputStream等这些类都是可以自动关闭的.

来个官方的例子:

然后按照这个,我自己简单写了一个版本:

简化了一些代码.

@SafeVarargs注解

@SafeVarargs注释只能应用于不能被覆盖的方法。 这些包括静态方法,最终实例方法,以及Java SE 9中的新增私有实例方法。

您可以将钻石语法与匿名内部类一起使用

可以在Java程序中编写的类型(如int或String)称为可指定类型。 无法用Java程序编写的编译器内部类型称为不可指定类型。

由于钻石操作员使用的推断,可能会出现不可指定的类型。 因为使用菱形和匿名类构造函数的推断类型可能不在类文件中签名属性所支持的类型集之外,所以在Java SE 7中不允许使用具有匿名类的菱形。

在Java SE 9中,只要推断的类型是可指定的,就可以在创建匿名内部类时使用菱形运算符。

不能单独使用下划线

在Java 9中,不能单独使用下划线,因为以后可能给下划线(_)特殊含义,所以在Java 9中定义如下变量会无法编译(在Java 8中使用无影响).

私有接口方法可用

在Java 9中,官方说明是可以使用私有接口方法,但我发现,公有方法也可以用(但必须是public static修饰才可以).

参考如下:

大概就这些.

Spring WebFlux+Spring Boot:入门示例

Spring WebFlux是啥

Spring WebFlux是Spring FrameWork 5.0新增的Web框架,特点如下:

  1. 非阻塞式;
  2. 不依赖Servlet;
  3. 多种部署方式,例如:jetty,tomcat,netty等

java

源码

完整源码:https://coding.net/u/pruidong/p/SpringBoot2WebFluxDemo/git

这个例子,使用了Spring Boot + Spring WebFlux + Thymeleaf + H2 ,通过Maven构建整个项目,在pom.xml中引用了还未正式发布的Spring Boot 2.0,所以部分依赖需要从Spring的Maven仓库中获取,速度可能较慢(2017/10/25,后期会直接更新pom.xml,但不会更新文章).

使用方式如下:

首先是pom.xml ,Maven构建文件:

Dao操作类:

其余文件,可以参考:项目地址

Java:@SpringApplicationConfiguraction和@WebIntegrationTest在Spring Boot中不能使用的解决方案

@SpringApplicationConfiguraction和@WebIntegrationTest解决方案

在Spring Boot 1.5.7 中@SpringApplicationConfiguraction和@WebIntegrationTest中不能使用了.

找了半天总算找到了解决方案.

记录如下.

java标志

源码

如果在Spring Boot中使用了Spring Security,并且使用了自定义UserDetails,在测试的时候需要使用如下方式:

Java:使用Spring Mail发送邮件

发送邮件

本项目源码在:https://coding.net/u/pruidong/p/SpringEmailDemo/git

之前简单使用过Java Email发送邮件,但最近接触了Spring Mail组件之后,发现在之前的基础上更加方便了.本文的内容参照了:Spring Mail官方文档,以及Thymeleaf官方示例.但对部分内容进行了修改和优化,也使得发送邮件变得更加简单.

有两点需要说明的是:

  1. 本文不会贴完所有的资源,可以前往[项目地址]获取所有源码;
  2. 项目基于Maven构建,并且不需要Spring Web MVC(也就是不需要在Tomcat中运行),配置相关邮箱信息之后,直接在控制台运行即可
Spring Mail发送邮件项目结构图
Spring Mail发送邮件项目结构图

部分源码

直接使用下面的源码无法构建出完整项目,因为有部分图片、模板文件(HTML,txt)未贴出,贴出下面的代码,仅作为参考依据.完整源码可以访问项目地址

Maven依赖文件(pom.xml):

java标志

配置邮箱地址、邮箱服务器信息(base.properties):

Spring的配置文件(AppInitial.java):

发送纯文本邮件(未使用模板,SendTextEmail.java):

发送带附件的邮件(SendFileEmail.java):

使用Thymeleaf发送模板邮件(参照了Thymeleaf官方示例,有部分改动):

运行测试类(Main.java):

到此.

Java:DOM4J解析带命名空间的XML

XML解析

在Java中,XML有多种方式可以解析.但用的比较多的还是DOM4J,对于带命名空间的XML解析,DOM4J官网并没有提供例子.下面的工厂类来自网络,我只是在其中增加了几个方法.另外,下面代码基于jdk1.8.

解析所使用的XML源文件:

java

源码