目錄
Lombok
2. Lombok註解失效原因
整合過程
1. 引入Lombok依賴:
2. 安裝Lombok插件
首頁 Java java教程 SpringBoot整合Lombok及常見問題怎麼解決

SpringBoot整合Lombok及常見問題怎麼解決

May 20, 2023 pm 12:46 PM
springboot lombok

Lombok

使用註解可以讓Lombok簡化Java程式碼、提高開發效率。本身就是一個優秀的Java程式庫,它採用了一種投機取巧的語法糖,簡化了Java的編碼,為Java程式碼的精簡提供了一種方式,但Lombok並非一個標準的Java庫。

在web開發過程中常需要寫的Java類,都需要花時間去加入對應的getter/setter、建構器和equals等方法。當屬性多時會出現大量的getter/setter方法,這些顯得很冗長也沒有太多技術含量,一旦修改屬性,容易出現忘記修改對應方法的情況。

SpringBoot整合Lombok及常見問題怎麼解決

官方網站:Project Lombok

1. Lombok常用註解

##@Cleanup :關閉流
註解 作用
@Data 註解在類別上;提供類別所有屬性的getting 和setting 方法,也提供了equals、 canEqual、hashCode、toString 方法
@Setter 註解在屬性上;為屬性提供setting 方法
#@Setter 註解在屬性上;提供屬性getting 方法
#@Log4j 註解在類別上;為類別提供一個屬性名為log 的log4j 日誌物件
@NoArgsConstructor #註解在類別上;為類別提供一個無參的建構方法
@ AllArgsConstructor 註解在類別上;為類別提供一個全參的建構方法
################################################################################################################################### ######@Builder######被註解的類別增加建構者模式#############@Synchronized#####同步鎖定####### ######@SneakyThrows######捕獲異常,類似try/catch 捕獲異常###########@NonNull######給參數加個這個註解,當參數為null會拋出空指標例外############@Value#######註解和@Data類似,預設定義所有成員變數為private final修飾,不產生set方法############

SpringBoot整合Lombok及常見問題怎麼解決

2. Lombok註解失效原因

在pom.xml引入Lombok依賴後,還需要安裝Lombok外掛重啟IDEA 才能生效。

整合過程

1. 引入Lombok依賴:

複製如下程式碼並插入pom.xml當中,等待maven倉庫自動下載安裝依賴,沒有設定自動導包點擊手動導入。

<!--导入lombok小辣椒驱动依赖,用来生成get/set等方法依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <!--<optional>true</optional>-->
            <version>1.18.12</version>
            <scope>provided</scope><!--自动生成有参无参构造-->
        </dependency>
登入後複製

SpringBoot整合Lombok及常見問題怎麼解決

SpringBoot整合Lombok及常見問題怎麼解決

2. 安裝Lombok插件

#在IDEA中點擊File-》Setting-》Plugins-》搜索Lombok安裝外掛程式後,重啟IDEA;

SpringBoot整合Lombok及常見問題怎麼解決

3. 利用Lombok為屬性產生getter/setter等方法程式碼範例

a.未使用Lombok編寫實體類別(程式肥胖、不好看)

使用IDE自帶的快捷鍵能自動產生getter/setter這些方法:

SpringBoot整合Lombok及常見問題怎麼解決

package com.dvms.entity;

/*
 *文件名: Anglerecord
 *创建者: CJW
 *创建时间:2020/6/6 14:40
 *描述: 记录
 */
public class Record {

    private String time;
    private String device;
    private String state;

    public Record(String time, String device, String state) {
        this.time = time;
        this.device = device;
        this.state = state;
    }

    public Record() {
    }

    public String getTime() {
        return this.time;
    }

    public String getDevice() {
        return this.device;
    }

    public String getState() {
        return this.state;
    }

    public Record setTime(String time) {
        this.time = time;
        return this;
    }

    public Record setDevice(String device) {
        this.device = device;
        return this;
    }

    public Record setState(String state) {
        this.state = state;
        return this;
    }

    public boolean equals(final Object o) {
        if (o == this) return true;
        if (!(o instanceof Record)) return false;
        final Record other = (Record) o;
        if (!other.canEqual((Object) this)) return false;
        final Object this$time = this.getTime();
        final Object other$time = other.getTime();
        if (this$time == null ? other$time != null : !this$time.equals(other$time)) return false;
        final Object this$device = this.getDevice();
        final Object other$device = other.getDevice();
        if (this$device == null ? other$device != null : !this$device.equals(other$device)) return false;
        final Object this$state = this.getState();
        final Object other$state = other.getState();
        if (this$state == null ? other$state != null : !this$state.equals(other$state)) return false;
        return true;
    }

    protected boolean canEqual(final Object other) {
        return other instanceof Record;
    }

    public int hashCode() {
        final int PRIME = 59;
        int result = 1;
        final Object $time = this.getTime();
        result = result * PRIME + ($time == null ? 43 : $time.hashCode());
        final Object $device = this.getDevice();
        result = result * PRIME + ($device == null ? 43 : $device.hashCode());
        final Object $state = this.getState();
        result = result * PRIME + ($state == null ? 43 : $state.hashCode());
        return result;
    }

    public String toString() {
        return "Record(time=" + this.getTime() + ", device=" + this.getDevice() + ", state=" + this.getState() + ")";
    }
}
登入後複製

b.引入Lombok生成方法(程式苗條、看著很舒服)

可自行依需求手動增添註解,也可以透過右鍵-》Refactor-》Lomok-》

SpringBoot整合Lombok及常見問題怎麼解決




SpringBoot整合Lombok及常見問題怎麼解決

package com.dvms.entity;

/*
 *文件名: Anglerecord
 *创建者: CJW
 *创建时间:2020/6/6 14:40
 *描述: 记录
 */

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;

@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true) //链式调用
public class Record {

    private String time;
    private String device;
    private String state;
}
登入後複製

優點與缺點(可能出現的問題即解決方法)

優點:SpringBoot整合Lombok及常見問題怎麼解決Lombok能透過註解的方式,在編譯時自動為屬性產生getter/setter、equals和toString等方法,省去了手動重建這些程式碼的麻煩,使程式實體類別(entity/pojo)程式碼看起來更‘苗條’、更有逼格。

缺點(可能出現的問題):

如果是個人開發,可能出現以下問題:

1.Lombok目前支援JDK1.8,升級JDK版本後可能會失效,解決方法:

a.透過IDE自帶的快捷鍵Alt Insert產生getter/setter,equals,hashCode,toString以及建構器等方法;


在最新版本的DeLombok中,可以使用該工具產生上述這些方法。右鍵選擇Refactored->DeLombok:

#############或使用一個指令:###
java -jar lombok.jar delombok src -d src-delomboked
登入後複製
###把Lombok 註解實作的類別檔案轉換成不使用Lombok 的Java 來源文件。 ######使用Lombok可以簡化JavaBean封裝,但會影響可讀性。另外盡量不要使用這個註解@AllArgsConstructor,該註解提供一個巨型構造器,使外界有機會在初始化物件時修改類別中所有的屬性是非常不安全的,畢竟Java類別中物件的某些屬性不應被修改。同時,如果某個Java類別中有好多個屬性,那麼Lombok會注入好多個參數的構造器到Java類別中,而構造器參數的順序完全由Lombok所控制。 ######3.使用Lombok來寫Javabean程式碼後,其餘依賴此javabean的其他程式碼都需要引入Lombok依賴,程式碼耦合度上升。同時,也需要在IDE中安裝Lombok的插件。 ######4.如果是協同開發,則需要注意以下問題:###當我們的程式碼中引入了Lombok插件,其他人也必須去下載、引入Lombok插件,否則Java程式碼可能無法正常運行。 ###

以上是SpringBoot整合Lombok及常見問題怎麼解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Springboot怎麼整合Jasypt實現設定檔加密 Springboot怎麼整合Jasypt實現設定檔加密 Jun 01, 2023 am 08:55 AM

Jasypt介紹Jasypt是一個java庫,它允許開發員以最少的努力為他/她的專案添加基本的加密功能,並且不需要對加密工作原理有深入的了解用於單向和雙向加密的高安全性、基於標準的加密技術。加密密碼,文本,數字,二進位檔案...適合整合到基於Spring的應用程式中,開放API,用於任何JCE提供者...添加如下依賴:com.github.ulisesbocchiojasypt-spring-boot-starter2. 1.1Jasypt好處保護我們的系統安全,即使程式碼洩露,也可以保證資料來源的

專業指導:如何成功安裝Eclipse Lombok外掛程式的專家建議與步驟 專業指導:如何成功安裝Eclipse Lombok外掛程式的專家建議與步驟 Jan 28, 2024 am 09:15 AM

專業指導:Eclipse安裝Lombok外掛程式的專家建議和步驟,需要具體程式碼範例摘要:Lombok是一種Java庫,能夠透過註解的方式簡化Java程式碼的編寫,並提供了一些強大的工具。本文將向讀者介紹如何在Eclipse中安裝和設定Lombok插件的步驟,並提供一些具體的程式碼範例,以便讀者能夠更好地理解和使用Lombok插件。下載Lombok插件首先,我們需

SpringBoot怎麼整合Redisson實現延遲隊列 SpringBoot怎麼整合Redisson實現延遲隊列 May 30, 2023 pm 02:40 PM

使用場景1、下單成功,30分鐘未支付。支付超時,自動取消訂單2、訂單簽收,簽收後7天未進行評估。訂單超時未評價,系統預設好評3、下單成功,商家5分鐘未接單,訂單取消4、配送超時,推播簡訊提醒…對於延時比較長的場景、即時性不高的場景,我們可以採用任務調度的方式定時輪詢處理。如:xxl-job今天我們採

怎麼在SpringBoot中使用Redis實現分散式鎖 怎麼在SpringBoot中使用Redis實現分散式鎖 Jun 03, 2023 am 08:16 AM

一、Redis實現分散式鎖原理為什麼需要分散式鎖在聊分散式鎖之前,有必要先解釋一下,為什麼需要分散式鎖。與分散式鎖相對就的是單機鎖,我們在寫多執行緒程式時,避免同時操作一個共享變數產生資料問題,通常會使用一把鎖來互斥以保證共享變數的正確性,其使用範圍是在同一個進程中。如果換做是多個進程,需要同時操作一個共享資源,如何互斥?現在的業務應用通常是微服務架構,這也意味著一個應用會部署多個進程,多個進程如果需要修改MySQL中的同一行記錄,為了避免操作亂序導致髒數據,此時就需要引入分佈式鎖了。想要實現分

springboot讀取檔案打成jar包後存取不到怎麼解決 springboot讀取檔案打成jar包後存取不到怎麼解決 Jun 03, 2023 pm 04:38 PM

springboot讀取文件,打成jar包後訪問不到最新開發出現一種情況,springboot打成jar包後讀取不到文件,原因是打包之後,文件的虛擬路徑是無效的,只能通過流去讀取。文件在resources下publicvoidtest(){Listnames=newArrayList();InputStreamReaderread=null;try{ClassPathResourceresource=newClassPathResource("name.txt");Input

Springboot+Mybatis-plus不使用SQL語句進行多表新增怎麼實現 Springboot+Mybatis-plus不使用SQL語句進行多表新增怎麼實現 Jun 02, 2023 am 11:07 AM

在Springboot+Mybatis-plus不使用SQL語句進行多表添加操作我所遇到的問題準備工作在測試環境下模擬思維分解一下:創建出一個帶有參數的BrandDTO對像模擬對後台傳遞參數我所遇到的問題我們都知道,在我們使用Mybatis-plus中進行多表操作是極其困難的,如果你不使用Mybatis-plus-join這一類的工具,你只能去配置對應的Mapper.xml文件,配置又臭又長的ResultMap,然後再寫對應的sql語句,這種方法雖然看上去很麻煩,但具有很高的靈活性,可以讓我們

SpringBoot與SpringMVC的比較及差別分析 SpringBoot與SpringMVC的比較及差別分析 Dec 29, 2023 am 11:02 AM

SpringBoot和SpringMVC都是Java開發中常用的框架,但它們之間有一些明顯的差異。本文將探究這兩個框架的特點和用途,並對它們的差異進行比較。首先,我們來了解一下SpringBoot。 SpringBoot是由Pivotal團隊開發的,它旨在簡化基於Spring框架的應用程式的建立和部署。它提供了一種快速、輕量級的方式來建立獨立的、可執行

SpringBoot怎麼自訂Redis實作快取序列化 SpringBoot怎麼自訂Redis實作快取序列化 Jun 03, 2023 am 11:32 AM

1.自訂RedisTemplate1.1、RedisAPI預設序列化機制基於API的Redis快取實作是使用RedisTemplate範本進行資料快取操作的,這裡開啟RedisTemplate類,查看該類別的源碼資訊publicclassRedisTemplateextendsRedisAccessorimplementsRedisOperations,BeanClassLoaderAware{//聲明了value的各種序列化方式,初始值為空@NullableprivateRedisSe

See all articles