手机版

Spring 4支持的Java 8特性

时间:2021-09-05 来源:互联网 编辑:宝哥软件园 浏览:

Spring框架4支持Java 8语言和API函数。在本文中,我们将关注Spring 4支持新的Java 8的功能。最重要的是Lambda表达式、方法引用、JSR-310日期和时间以及可重复的注释。

表达式

Spring的代码库在Java 8中使用了大量的函数接口,Lambda表达式可以用来编写更干净、更紧凑的代码。只要函数接口对象的期望出现,我们就可以提供一个Lambda表达式。让我们更进一步,先学习功能接口。

功能接口

具有单个抽象方法的接口称为函数接口。以下是JDK的一些功能界面示例:

比较器是只有一个抽象非对象方法的函数。虽然声明了两个抽象方法,但equals是对应于对象的公共方法,因此它被排除在计数之外。具有对象类方法而没有非对象方法的接口不是函数接口。

如果一个接口有一个抽象的非对象类方法,并且用一个唯一的对象类方法从一个非功能接口扩展而来,那么这个接口被称为功能接口。

Spring框架的功能接口示例:

@FunctionalInterface注释可以用在接口声明的顶部声明中,但这不是必需的。编译器使用此注释来检查接口是否是有效的功能接口。如果我们试图在接口中定义多个单一的抽象方法,编译器会抛出一个错误。

功能描述符

接口的函数描述符是接口的抽象方法的方法类型。方法类型包括参数类型、返回类型和抛出子句。

示例:

如何编写Lambda表达式

Lambda表达式的语法可以分为三个部分:

箭头()参数列表:表达式可以包含0个或更多参数示例: () {system。out.println("无参数");}(字符串参数) { System.out.println("一个参数: "参数);}(字符串arg1,整数arg2) { System.out.println("两个参数: " arg1 "和" arg 2 ");表达式主体:可以是单个表达式或代码块。简单地计算并返回一个表达式。示例:(字符串参数){系统。out.println("一个参数: " arg);}如果表达式Body中有语句块,则判断为方法体,隐藏的return语句在块执行后将控制权交给调用者。现在让我们看看如何使用Lambda表达式:

例1:

//使用Lambda表达式

例2:

//使用Lambda表达式

可以通过Spring的回调函数使用Lambda表达式。例如,使用ConnectionCallback检索给定JDBC连接的列表可以写成以下语句:jdbctemplate。执行(连接-连接。getcatalog())

方法参考

功能接口也可以使用方法引用来实现,方法引用引用方法或构造函数,但不调用它们。方法引用类似于Lambda表达式,但是方法引用引用现有类的方法,Lambda将匿名方法定义为函数接口的实例。

在Java 8中,一个新的包包含一个常用于Lambda表达式和方法引用的函数接口:java.util.function

日期时间应用编程接口

Java中现有的日期和时间类存在许多问题。日期和日历类最大的问题之一是它们不是线程安全的。在编写日期处理代码时,开发人员必须特别注意并发问题。Date类也不支持国际化,因此不支持时区。开发人员必须编写大量代码来支持不同的时区。

日期和时间类也显示了糟糕的应用编程接口设计。在java.util.Date中,月从0开始,日从1开始,年从1900开始。缺乏一致性。现在,日期和时间类的这些其他问题已经在Java 8中新的日期和时间API中得到解决。

java.time包下新的日期和时间API的重要类是LocalDate、LocalTime和ZonedDateTime。

本地日期和本地时间

LocalDate的默认格式是YYYY-MM-DD,没有时间。这是一个不可变的类。我们可以使用now()方法获取当前日期。

创建新的本地日期实例的示例:

//获取当前日期

我们还可以通过输入年、月和日的参数来创建LocalDate的新实例。

//2016年4月1日

LocalTime表示没有日期的时间,它是常数。时间的默认格式是hh : mm : ss.zzz。

创建新的本地时间实例的示例:

//获取当前时间

//18:30:30

默认情况下,LocalDate和LocalTime类使用默认时区的系统时钟。这些类还支持通过重载新的()方法来修改时区。您可以通过传递zoneid来获取特定时区的日期。

示例:

//当前当地日期加尔各答(印度)

此外,还有一个结合了日期和时间的类LocalDateTime。默认格式为yyyy-mm-ddthh 3360mm : ss . zzz.

//当前日期和时间

//2016-04-01 13:30

ZonedDateTime

这是一个不可变的类,表示包含时区信息的日期和时间。我们可以使用这个类的一个实例来表示特定的事件,例如世界某些地方的会议。

//当前时间使用系统时间和默认区域

//当前时间使用特定时区的系统时钟

Spring 4提供了一个转换框架,支持所有属于Java 8日期和时间API的类。Spring 4可以使用2016-9-10字符串,并将其转换为Java 8 LocalDate的实例。Spring 4还支持通过@DateTimeFormat注释格式化Java 8日期时间字段。@DateTimeFormat声明字段应该格式化为datetime。

重复评论

在Java 8之前,不允许向声明或类型(如类或方法)添加同一类型的多个注释。作为一种变通方法,开发人员必须将它们组合成一个容器注释。

示例:

重复注释允许我们重写相同的代码,而无需显式使用容器注释。虽然这里不使用容器注释,但是Java编译器负责将两个注释打包到一个容器中:

示例:

定义重复的注释

定义一个重复的注释,用一个可重用的@Repeatable注释标记它,或者用一个重复的注释类型族属性创建一个注释。

步骤1:声明重复的注释类型:

步骤2:声明容器注释类型。

所有实现如下:

要在运行时获取注释信息,可以通过@ retention policy . runtime对其进行注释。

检索评论

GetAnnotationsByType()或getDeclaredAnnotationsByType()是访问注释反射API的新方法。

也可以使用getAnnotation()或getDeclaredAnnotation()通过其容器注释来访问注释。

结论

Spring 4也可以在Java 6和Java 7中运行。由于Spring使用了大量的函数接口,有了Java 8和Spring 4,您将能够使用Lambda表达式和函数接口,并编写更干净、更紧凑的代码。

以上就是本文的全部内容。希望本文的内容能给大家的学习或工作带来一些帮助,也希望多多支持我们!

版权声明:Spring 4支持的Java 8特性是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。