最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring 4 支持的 Java 8 特性

 更新時(shí)間:2017年03月20日 10:30:41   作者:落葉的博客  
Spring 框架 4 支持 Java 8 語言和 API 功能。在本文中,我們將重點(diǎn)放在 Spring 4 支持新的 Java 8 的功能。最重要的是 Lambda 表達(dá)式,方法引用,JSR-310的日期和時(shí)間,和可重復(fù)注釋。下面跟著小編一起來看下吧

Spring 框架 4 支持 Java 8 語言和 API 功能。在本文中,我們將重點(diǎn)放在 Spring 4 支持新的 Java 8 的功能。最重要的是 Lambda 表達(dá)式,方法引用,JSR-310的日期和時(shí)間,和可重復(fù)注釋。

Lambda 表達(dá)式

Spring 的代碼庫使用了 Java 8 大量的函數(shù)式接口,Lambda 表達(dá)式可以用來編寫更干凈和緊湊的代碼。每當(dāng)出現(xiàn)函數(shù)式接口的對象的預(yù)期時(shí)我們便可以提供一個(gè) Lambda 表達(dá)式。讓我們進(jìn)一步繼續(xù)之前首先學(xué)習(xí)函數(shù)式接口。

函數(shù)式接口

有單一抽象方法的接口被稱為函數(shù)式接口。下面是 JDK 中函數(shù)式接口的一些例子:

Comparator 是僅具有一個(gè)抽象的非對象方法的函數(shù)。盡管聲明了兩個(gè)抽象方法,因?yàn)?equals 是對應(yīng)于對象的公共方法所以從計(jì)數(shù)里排除了。其中有一個(gè)對象類方法且沒有非對象方法的接口并不是函數(shù)式接口。

一個(gè)接口如果有一個(gè)抽象的非對象類方法并且擴(kuò)展自具有唯一對象類方法的非函數(shù)式接口,則稱為函數(shù)式接口。

Spring 框架的函數(shù)式接口的例子:

@FunctionalInterface 注解可以在接口聲明的頂部聲明中被使用,但這并不是必需的。此注解用于由編譯器來檢測該接口是不是有效的函數(shù)式接口。如果我們試圖在接口里定義多個(gè)單一抽象方法,編譯器將拋出一個(gè)錯(cuò)誤。

函數(shù)描述符

接口的函數(shù)描述符是該接口的一個(gè)抽象方法的方法的類型。該方法類型包括參數(shù)類型,返回類型和 throws 子句。

例:

如何編寫 Lambda 表達(dá)式

Lambda 表達(dá)式的語法可以拆分成三部分:

  • 一個(gè)箭頭 (–>)
  • 參數(shù)列表: 一個(gè) Lambda 表達(dá)式可以包含0個(gè)或多個(gè)參數(shù) 例: () → { System.out.println(“ No arguments”); } (String arg) → { System.out.println(“ One argument : ”+arg); } (String arg1, Integer arg2) → { System.out.println(“Two arguments : ”+arg1+” and ”+arg2); }
  • 表達(dá)式體: 可以是單個(gè)表達(dá)式或代碼塊。單個(gè)表達(dá)式將被簡單地求值并返回。 例: (String arg) → { System.out.println(“ One argument : ”+arg); } 如果表達(dá)式體(Body)中存在語句塊,那么它將被判定為方法體,并且在塊執(zhí)行后隱藏的返回語句將控制權(quán)交給調(diào)用者。

現(xiàn)在我們看一下如何使用 Lambda 表達(dá)式:

例1:

// 使用 Lambda 表達(dá)式

例2:

//使用 Lambda 表達(dá)式

你可以通過 Spring 的回調(diào)函數(shù)使用 Lambda 表達(dá)式。例如,用一個(gè) ConnectionCallback 檢索給定 JDBC 連接的列表,可寫成如下語句: jdbcTemplate.execute(connection -> connection.getCatalog())

方法引用

函數(shù)式接口也可以使用方法引用來實(shí)現(xiàn),引用方法或構(gòu)造函數(shù)但并不調(diào)用它們。方法引用和 Lambda 表達(dá)式是類似的,但方法引用是指現(xiàn)有類的方法,而 Lambda 定義了一個(gè)匿名方法,并將其作為函數(shù)式接口的實(shí)例。

在 Java 8 中一個(gè)新增包中包含了常用于 Lambda 表達(dá)式和方法引用的函數(shù)式接口:java.util.function。

Date Time API

在 Java 中現(xiàn)有的 Date 和 Time 類存在多個(gè)問題。Date 和 Calendar 類的最大問題之一是它們不是線程安全的。在編寫日期處理代碼時(shí)開發(fā)人員不得不特別小心并發(fā)問題。Date 類也不支持國際化,因此不支持時(shí)區(qū)。開發(fā)人員必須編寫大量的代碼來支持不同的時(shí)區(qū)。

Date 和 Time 類也顯現(xiàn)出不佳的 API 設(shè)計(jì)。java.util.Date 中的月從0,日從1,年從1900開始。缺少一致性?,F(xiàn)在這些與 Date 和 Time 類的其它幾個(gè)問題在 Java 8 中的新 Date 和 Time API 中已解決。

在 java.time 包下新的 Date 和 Time API 的重要的類是 LocalDate,LocalTime 和 ZonedDateTime。

LocalDate 和 LocalTime

LocalDate 表示日期時(shí)的默認(rèn)格式為 YYYY-MM-DD,并沒有時(shí)間。這是一個(gè)不可變類。我們可以使用 now() 方法獲得的當(dāng)前日期。

新建 LocalDate 實(shí)例的例子:

//獲取當(dāng)前日期

我們也可以通過對年,月,日的輸入?yún)?shù)來新建 LocalDate 實(shí)例。

// 2016年4月1日

LocalTime 表示無日期的時(shí)間,是不變的。時(shí)間的默認(rèn)格式為 hh:mm:ss.zzz。

新建 LocalTime 實(shí)例的例子:

//獲取當(dāng)前時(shí)間

// 18:30:30

默認(rèn)情況下,LocalDate 和 LocalTime 類使用默認(rèn)時(shí)區(qū)的系統(tǒng)時(shí)鐘。這些類還提供了通過重載 new() 方法對修改時(shí)區(qū)的支持??梢酝ㄟ^傳遞 zoneid 來獲得一個(gè)特定時(shí)區(qū)中的日期。

例子:

// 當(dāng)前本地日期加爾各答(印度)

此外,還有一個(gè)類,LocalDateTime 組合了日期和時(shí)間,默認(rèn)格式為 yyyy-MM-ddTHH:MM:ss.zzz·。

//當(dāng)前日期和時(shí)間

// 2016-04-01 13:30

ZonedDateTime

這是一個(gè)不可變的類,用于表示包括時(shí)區(qū)信息的日期和時(shí)間。我們可以使用這個(gè)類的一個(gè)實(shí)例來表示特定事件,如在世界的某些地區(qū)一個(gè)會議。

// 當(dāng)前時(shí)間使用系統(tǒng)的時(shí)間和默認(rèn)區(qū)域

// 當(dāng)前時(shí)間使用特定時(shí)區(qū)的系統(tǒng)時(shí)鐘

Spring 4 提供了一個(gè)轉(zhuǎn)換框架,支持做為 Java 8 日期和時(shí)間 API 一部分的所有類。Spring 4 可以使用一個(gè) 2016-9-10 的字符串,并把它轉(zhuǎn)換成 Java 8 LocalDate 的一個(gè)實(shí)例。Spring 4 還支持通過 @DateTimeFormat 注解格式化 Java 8 Date-Time 字段。@DateTimeFormat 聲明一個(gè)字段應(yīng)該格式化為日期時(shí)間。

重復(fù)注解

在 Java 8 之前,將相同類型的多個(gè)注釋加到聲明或類型(例如一個(gè)類或方法)中是不允許的。作為一種變通方法,開發(fā)人員不得不將它們組合在一起成為單個(gè)容器注解。

例:

重復(fù)注解允許我們重寫相同的代碼并不需顯式地使用容器注解。雖然容器注解沒有在這里使用的,Java 編譯器負(fù)責(zé)將兩個(gè)注解封裝成一個(gè)容器:

例:

定義重復(fù)注解

定義一個(gè)重復(fù)注解,通過可重復(fù)使用的 @Repeatable 注解來進(jìn)行標(biāo)注,或創(chuàng)建一個(gè)具有重復(fù)注解類型系列屬性的注解。

第1步:聲明重復(fù)注解類型:

第2步:聲明容器注解類型。

全部的實(shí)現(xiàn)如下所示:

為了獲得在運(yùn)行時(shí)的注解信息,通過 @Retention(RetentionPolicy.RUNTIME) 注釋即可。

檢索注解

getAnnotationsByType() 或 getDeclaredAnnotationsByType() 是用于訪問注解反射 API 中的新方法。

注解還可以通過它們的容器注解用 getAnnotation() 或 getDeclaredAnnotation() 進(jìn)行訪問。

結(jié)論

Spring 4 還可運(yùn)行在 Java 6 和 Java 7 中。由于 Spring 使用了很多的函數(shù)式接口,用 Java 8 和 Spring 4,你將能夠使用 Lambda 表達(dá)式和函數(shù)式接口,并可寫出更干凈、緊湊的代碼。

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • 簡單了解synchronized和lock的區(qū)別

    簡單了解synchronized和lock的區(qū)別

    這篇文章主要介紹了簡單了解synchronized和lock的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 淺談JavaIO之try with底層原理

    淺談JavaIO之try with底層原理

    眾所周知,所有被打開的系統(tǒng)資源,比如流、文件或者Socket連接等,都需要被開發(fā)者手動關(guān)閉,否則隨著程序的不斷運(yùn)行,資源泄露將會累積成重大的生產(chǎn)事故。本文將介紹JavaIO之try with底層原理。
    2021-06-06
  • java中Map如何根據(jù)key的大小進(jìn)行排序詳解

    java中Map如何根據(jù)key的大小進(jìn)行排序詳解

    這篇文章主要給大家介紹了關(guān)于java中Map如何根據(jù)key的大小進(jìn)行排序的相關(guān)資料,有時(shí)候我們業(yè)務(wù)上需要對map里面的值按照key的大小來進(jìn)行排序的時(shí)候我們就可以利用如下方法來進(jìn)行排序了,需要的朋友可以參考下
    2023-09-09
  • Springboot接收前端的Json但是為null問題

    Springboot接收前端的Json但是為null問題

    這篇文章主要介紹了Springboot接收前端的Json但是為null問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教<BR>
    2024-05-05
  • java SpringBoot自定義注解,及自定義解析器實(shí)現(xiàn)對象自動注入操作

    java SpringBoot自定義注解,及自定義解析器實(shí)現(xiàn)對象自動注入操作

    這篇文章主要介紹了java SpringBoot自定義注解,及自定義解析器實(shí)現(xiàn)對象自動注入操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Java高版本Api在Android中的使用方法詳解

    Java高版本Api在Android中的使用方法詳解

    API(Application?Programming?Interface)應(yīng)用程序編程接口,java?API是一本程序員字典,是JDK提供給我們使用的類的說明文檔,下面這篇文章主要給大家介紹了關(guān)于Java高版本Api在Android中的使用方法,需要的朋友可以參考下
    2022-05-05
  • String s = new String(''a '') 到底產(chǎn)生幾個(gè)對象

    String s = new String(''a '') 到底產(chǎn)生幾個(gè)對象

    這篇文章主要介紹了String s = new String(" a ") 到底產(chǎn)生幾個(gè)對象,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Java利用redis zset實(shí)現(xiàn)延時(shí)任務(wù)詳解

    Java利用redis zset實(shí)現(xiàn)延時(shí)任務(wù)詳解

    zset作為redis的有序集合數(shù)據(jù)結(jié)構(gòu)存在,排序的依據(jù)就是score。本文就將利用zset score這個(gè)排序的這個(gè)特性,來實(shí)現(xiàn)延時(shí)任務(wù),感興趣的可以了解一下
    2022-08-08
  • 在Mac下IDEA安裝并使用protobuf方式(Java)

    在Mac下IDEA安裝并使用protobuf方式(Java)

    這篇文章主要介紹了在Mac下IDEA安裝并使用protobuf方式(Java),具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java 切割字符串的幾種方式集合

    Java 切割字符串的幾種方式集合

    這篇文章主要介紹了Java 切割字符串的幾種方式集合,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論

阜新市| 陈巴尔虎旗| 都匀市| 互助| 许昌县| 吉木乃县| 梓潼县| 城口县| 高碑店市| 南平市| 鹤峰县| 武邑县| 菏泽市| 颍上县| 湖口县| 建平县| 铜川市| 南川市| 纳雍县| 岑溪市| 宜黄县| 青浦区| 咸阳市| 明光市| 白河县| 从化市| 健康| 炎陵县| 和平区| 江永县| 昆山市| 广水市| 海兴县| 南靖县| 黔江区| 大化| 金山区| 龙州县| 大埔区| 新河县| 黑河市|