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

從java8升級java17的一些調(diào)整總結(jié)

 更新時間:2026年03月03日 11:09:54   作者:學(xué)習(xí)OK呀  
在過去的幾年里,Java經(jīng)歷了多次版本升級,從JDK8到JDK17,每一次升級都帶來了許多新的特性和改進,這篇文章主要介紹了從java8升級java17的一些調(diào)整,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

前言

jdk8 一直堅挺的使用過來,用了很多年了也已經(jīng)非常習(xí)慣和了解了。為什么我現(xiàn)在要升級 jdk17 呢?由于連帶的框架的升級,springboot2,到 springboot3,所需要的版本也在不斷的限制,放棄了原有的 jdk8。jdk17引入了許多實用的新特性,使代碼更簡潔、易讀、易維護. 在性能上也有顯著的改善。

語法糖變化

多行的字符串(Java 13/15)

之前我們標(biāo)識字符內(nèi)容里面總有煩人的\" 來轉(zhuǎn)義引號。在新語法下,可以直接使用 """ 來前后包裹字符串.可以非常輕松的表達??雌饋硪膊粫敲吹膩y七八糟。對我來說還是很好用,尤其是對 json數(shù)據(jù)處理格外的明顯。

"""
{"code":200,"msg":"成功","data":{"total":0,"data":[]}}
"""

switch 的表達式(Java 12 / 13)

可以直接使用箭頭來表達,避免了break的問題,增加了返回值的表達式

String day = switch (dayOfWeek) {
    case MONDAY, TUESDAY -> "工作日";
    case SATURDAY, SUNDAY -> "周末";
    default -> throw new IllegalStateException("未知日期");
};

模式的匹配(Java 16)

傳統(tǒng)的類型檢查,我們經(jīng)常需要兩步,判斷對象是否屬于某個類型,然后在強制類型的轉(zhuǎn)換

if (obj instanceof String) {
    String s = (String) obj;
    System.out.println(s.toUpperCase());
}

但是在 jdk16 之后,可以直接一步到位

if (obj instanceof String s) {
    System.out.println(s.toUpperCase()); // s 已經(jīng)自動轉(zhuǎn)換為 String 類型
}

記錄類record

創(chuàng)建一個 record 類, 會自動幫我們創(chuàng)建equals() / hashCode() / toString()/ get方法。

注意:所有字段都是 final 類型,且提供了全參構(gòu)造函數(shù) 。 但不可以繼承哦

record Point(int x, int y) {}

推薦使用場景為: 只需要一個不可變的數(shù)據(jù)類(DTO、POJO、VO 等)的時候

JDK 17 API上的升級

  1. 移除了部分舊 API
  • javax.xml.bind(JAXB)不再內(nèi)置 → 需手動添加依賴(如用于 SOAP 或 XML 序列化)
  • java.corba, java.transaction 等模塊被移除
  1. 強封裝了內(nèi)部的API
  • JDK 17 默認禁止反射訪問 sun.*、jdk.internal.* 等包
  • 某些舊庫(尤其通過反射操作 Unsafe 的)會出錯

框架和依賴上的變化

springboot 框架

我們常用的springboot框架,從之前版本 2 到了現(xiàn)在的版本 3.

比較重大的變化就是 Jakarta EE 9+ 命名空間變更包名從 javax.* 變?yōu)?jakarta.*

javax.persistence.*   -> jakarta.persistence.*
javax.validation.*    -> jakarta.validation.*
javax.servlet.*       -> jakarta.servlet.*
javax.annotation.*    -> jakarta.annotation.*
javax.transaction.*   -> jakarta.transaction.*

mybatisplus

從原先的mybatis-plus-boot-starter 依賴包替換成 mybatis-plus-spring-boot3-starter

mysql 驅(qū)動

可以使用新命名:mysql-connector-j,但連接配置保持不變,

spring.datasource.url=jdbc:mysql://localhost:3306/db?useSSL=false&serverTimezone=UTC

jwt

依賴模塊的io.jsonwebtoken:jjwt , 拆分為多個模塊(jjwt-api, jjwt-impl, jjwt-jackson 等)

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-api</artifactId>
    <version>1.0.0</version>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-impl</artifactId>
    <version>1.0.0</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-jackson</artifactId>
    <version>1.0.0</version>
    <scope>runtime</scope>
</dependency>

代碼語法構(gòu)造上的一些調(diào)整:

Jws<Claims> jws = Jwts.parser()
    .verifyWith(secretKey)
    .build()
    .parseSignedClaims(token);

總結(jié)

使用了多年的java8,在面對不斷更新的jdk和springboot,為了更好的適配新的AI,我們還是盡量選擇擁抱新技術(shù),當(dāng)然歷史項目的沉重包袱確實很難一下子卸下,需要慢慢過渡。新技術(shù)的使用最好還是應(yīng)用在新項目上的嘗試和體驗。

相關(guān)文章

  • mybatis Interceptor對UpdateTime自動處理的實現(xiàn)方法

    mybatis Interceptor對UpdateTime自動處理的實現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于使用mybatis Interceptor對UpdateTime自動處理的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧
    2018-12-12
  • Java實現(xiàn)月餅的制作、下單和售賣功能

    Java實現(xiàn)月餅的制作、下單和售賣功能

    這篇文章主要介紹了Java實現(xiàn)月餅的制作、下單和售賣,借此機會,我們用Lambda實現(xiàn)一遍月餅制作,下單,售賣的開發(fā)設(shè)計模式,主要有制作月餅的工廠模式,結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • IDEA連接mysql數(shù)據(jù)庫報錯的解決方法

    IDEA連接mysql數(shù)據(jù)庫報錯的解決方法

    這篇文章主要介紹了IDEA連接mysql數(shù)據(jù)庫報錯的解決方法,文中有非常詳細的圖文示例,對出現(xiàn)Server returns invalid timezone. Go to ‘Advanced‘ tab and set ‘serverTimezone‘ prope報錯的小伙伴們很有幫助喲,需要的朋友可以參考下
    2021-05-05
  • 如何使用stream從List對象中獲取某列數(shù)據(jù)

    如何使用stream從List對象中獲取某列數(shù)據(jù)

    這篇文章主要介紹了如何使用stream從List對象中獲取某列數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • JAVA利用遞歸刪除文件代碼實例

    JAVA利用遞歸刪除文件代碼實例

    這篇文章主要介紹了JAVA利用遞歸刪除文件代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • Spring Cloud 2026 網(wǎng)關(guān)模式實現(xiàn)示例

    Spring Cloud 2026 網(wǎng)關(guān)模式實現(xiàn)示例

    本文主要介紹了Spring Cloud 2026 網(wǎng)關(guān)模式實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-04-04
  • SpringBoot使用Tika進行文檔解析的完整指南

    SpringBoot使用Tika進行文檔解析的完整指南

    Tika是一款A(yù)pache開源的,跨平臺,支持多品種文本類型的內(nèi)容檢測和提取工具,本文主要為大家介紹了SpringBoot使用Tika進行文檔解析的完整步驟,希望對大家有所幫助
    2025-07-07
  • SpringBoot實現(xiàn)動態(tài)端口切換黑魔法

    SpringBoot實現(xiàn)動態(tài)端口切換黑魔法

    這篇文章主要為大家詳細介紹了SpringBoot如何實現(xiàn)動態(tài)端口切換黑魔法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • java小知識之查詢數(shù)據(jù)庫數(shù)據(jù)的元信息

    java小知識之查詢數(shù)據(jù)庫數(shù)據(jù)的元信息

    這篇文章主要給大家介紹了關(guān)于java小知識之查詢數(shù)據(jù)庫數(shù)據(jù)的元信息,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-10-10
  • spring web.xml指定配置文件過程解析

    spring web.xml指定配置文件過程解析

    這篇文章主要介紹了spring web.xml指定配置文件過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02

最新評論

喀什市| 广德县| 蛟河市| 宜川县| 汤原县| 武宣县| 敦煌市| 滨州市| 汤阴县| 始兴县| 理塘县| 八宿县| 三亚市| 沅江市| 漳浦县| 黔江区| 马鞍山市| 泸水县| 彰化市| 涞水县| 麦盖提县| 改则县| 灵武市| 元谋县| 都江堰市| 成都市| 扶沟县| 乌兰察布市| 卓资县| 繁峙县| 天等县| 虎林市| 湘潭市| 桃园县| 革吉县| 泗洪县| 苏尼特左旗| 彰武县| 四会市| 边坝县| 革吉县|