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表达式和函数接口,并编写更干净、更紧凑的代码。
以上就是本文的全部内容。希望本文的内容能给大家的学习或工作带来一些帮助,也希望多多支持我们!