Java工具包之Lombok使用
在Spring項(xiàng)目中創(chuàng)建java對象,如果使用手動(dòng)生成getter、setter、toString等方法提供調(diào)用接口,會(huì)導(dǎo)致代碼修改成本與復(fù)雜度大大增加;
lombok是一個(gè)Java工具庫,通過添加注解的方式簡化了Java的開發(fā);
接下來簡單介紹lombok的使用方法;
使用lombok有兩種方法:
(1)maven倉庫手動(dòng)導(dǎo)入依賴+注解;
(2)EditStarters插件+注解;
1. maven倉庫手動(dòng)導(dǎo)入依賴+注解
1.1 maven倉庫引入依賴
鏈接如下:
https://mvnrepository.com/artifact/org.projectlombok/lombok/1.18.24
copy至pom.xml文件中即可:
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> <scope>provided</scope> </dependency>
注:勿忘在maven面板中進(jìn)行刷新:
1.2 在類上使用@Data注解
在java類上增加@Data注解:
package com.example.demo.controller; import lombok.Data; import java.util.Date; @Data public class MessageInfo { private String from; private String to; private String message; private Date CreateTime; }
此時(shí)在對應(yīng)的Controller中增加相應(yīng)的獲取屬性的get方法,即使沒有顯式編寫相關(guān)代碼,但可見可以成功調(diào)用: (.getFrom()方法未標(biāo)紅報(bào)錯(cuò))
package com.example.demo.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RequestMapping("/message") @RestController public class MessageController { @RequestMapping("/publish") public Boolean publishMessage(MessageInfo messageInfo){ String from = messageInfo.getFrom(); return false; } @RequestMapping("/getMessageList") public List<MessageInfo> getMessageList(){ return null; } }
(請忽略該controller的業(yè)務(wù)邏輯,此處僅用于輔助展示lombok作用)
@Data注解就是lombok提供的通過注解自動(dòng)生成屬性的get與set方法,可避免修改接口屬性導(dǎo)致需修改其對應(yīng)的get與set方法造成的麻煩,同時(shí)也可以消除冗余代碼;
1.3 在屬性上使用@Getter與@Setter注解
@Data注解修飾類時(shí),表示提供該類所有屬性的get與set方法,這對于某些屬性不希望被獲取是不夠靈活的,故而可以在屬性上使用@Getter與@Setter注解,以實(shí)現(xiàn)面向?qū)傩陨蒰et與set方法:
package com.example.demo2.controller; import lombok.Getter; import lombok.Setter; import lombok.ToString; import java.util.Date; @ToString public class MessageInfo { @Getter @Setter private String from; @Getter @Setter private String to; private String message; private Date CreateTime; }
以上代碼的含義為:屬性from支持獲取與寫入,to支持獲取;
注:附lombok相較于@Data更細(xì)顆粒度的注解有:
注解 | 作用 |
@Getter | 自動(dòng)添加getter方法 |
@Setter | 自動(dòng)添加setter方法 |
@ToString | 自動(dòng)添加toString方法 |
@EqualAndHashCode | 自動(dòng)添加equals和hashCode方法 |
@NoArgsConstructor | 自動(dòng)添加無參構(gòu)造方法 |
@AllArgsConstructor | 自動(dòng)添加全屬性構(gòu)造方法,順序按照屬性的定義順序 |
@NonNull | 屬性不能為null |
@RequireArgsConstructor | 自動(dòng)添加必須屬性的構(gòu)造方法,final+@Null的屬性為必須 |
@Data = @Getter + @Setter +@ToString +@ EqualAndHashCode +@ RequireArgsConstructor + @ NoArgsConstructor;
2. EditStarters插件+注解
2.1 安裝EditStarters插件
安裝完后重啟IDEA方可生效;
2.2 在pom.xml中進(jìn)行操作
直接增添lombok標(biāo)簽即可;
注:
- 1、勿忘刷新maven;
- 2、如果URL錯(cuò)誤,可更換為以下URL(選擇Gitee):
3、使用此方法生成的dependency如下:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
是沒有版本標(biāo)識(shí)的;
2.3 在java對象類中使用注解
注解使用方法同第一種方法,詳見方法1的2和3步驟;
3. lombok工具使用結(jié)果查看
3.1 手動(dòng)package
3.2 查看文件內(nèi)容
文件內(nèi)容如下:
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) // package com.example.demo2.controller; import java.util.Date; public class MessageInfo { private String from; private String to; private String message; private Date CreateTime; public MessageInfo() { } public String toString() { return "MessageInfo(from=" + this.getFrom() + ", to=" + this.getTo() + ", message=" + this.message + ", CreateTime=" + this.CreateTime + ")"; } public String getFrom() { return this.from; } public void setFrom(String from) { this.from = from; } public String getTo() { return this.to; } public void setTo(String to) { this.to = to; } }
對比原始文件:
package com.example.demo2.controller; import lombok.Getter; import lombok.Setter; import lombok.ToString; import java.util.Date; @ToString public class MessageInfo { @Getter @Setter private String from; @Getter @Setter private String to; private String message; private Date CreateTime; }
可見lombok在編譯階段生成了部分代碼;
注:此處雖然處于class目錄下,但該文件并不是字節(jié)碼文件,而是經(jīng)過idea反編譯的;
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot?熱搜與不雅文字過濾的實(shí)現(xiàn)
本文主要介紹了SpringBoot?熱搜與不雅文字過濾的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07深度解析Java中volatile的內(nèi)存語義實(shí)現(xiàn)以及運(yùn)用場景
這篇文章主要介紹了Java中volatile的內(nèi)存語義實(shí)現(xiàn)以及運(yùn)用場景,通過JVM的機(jī)制來分析volatile關(guān)鍵字在線程編程中的作用,需要的朋友可以參考下2015-12-12Java Socket編程簡介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java Socket編程簡介的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05基于Java編寫一個(gè)限流工具類RateLimiter
這篇文章主要為大家詳細(xì)介紹了如何基于Java編寫一個(gè)限流工具類RateLimiter,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01java實(shí)現(xiàn)圖片無損任意角度旋轉(zhuǎn)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)圖片無損任意角度旋轉(zhuǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02