国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Lombok使用詳解,簡化Java編程

開發 后端
在 Java 應用程序中存在許多重復相似的、生成之后幾乎不對其做更改的代碼,但是我們還不得不花費很多精力編寫它們來滿足 Java 的編譯需求。

 前言

在 Java 應用程序中存在許多重復相似的、生成之后幾乎不對其做更改的代碼,但是我們還不得不花費很多精力編寫它們來滿足 Java 的編譯需求

比如,在 Java 應用程序開發中,我們幾乎要為所有 Bean 的成員變量添加 get() ,set() 等方法,這些相對固定但又不得不編寫的代碼浪費程序員很多精力,同時讓類內容看著更雜亂,我們希望將有限的精力關注在更重要的地方。

[[283807]] 

Lombok 已經誕生很久了,甚至在 Spring Boot Initalizr 中都已加入了 Lombok 選項,

 

這里我們將 Lombok 做一下詳細說明:

Lombok

官網的介紹:Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java. Never write another getter or equals method again. Early access to future java features such as val, and much more.

直白的說: Lombok 是一種 Java™ 實用工具,可用來幫助開發人員消除 Java 的冗長,尤其是對于簡單的 Java 對象(POJO)。它通過注解實現這一目的,且看:

Bean 的對比

傳統的 POJO 類是這樣的

 

通過Lombok改造后的 POJO 類是這樣的

 

一眼可以觀察出來我們在編寫 Employee 這個類的時候通過 @Data 注解就已經實現了所有成員變量的 get() 與 set() 方法等,同時 Employee 類看起來更加清晰簡潔。Lombok 的神奇之處不止這些,豐富的注解滿足了我們開發的多數需求。

Lombok的安裝

查看下圖,@Data的實現,我們發現這個注解是應用在編譯階段的

 

這和我們大多數使用的注解,如 Spring 的注解(在運行時,通過反射來實現業務邏輯)是有很大差別的,如Spring 的@RestController 注解

 

一個更直接的體現就是,普通的包在引用之后一般的 IDE 都能夠自動識別語法,但是 Lombok 的這些注解,一般的 IDE 都無法自動識別,因此如果要使用 Lombok 的話還需要配合安裝相應的插件來支持 IDE 的編譯,防止IDE 的自動檢查報錯,下面以 IntelliJ IDEA 舉例安裝插件。

在Repositories中搜索Lombok,安裝后重啟IDE即可

 

在Maven或Gradle工程中添加依賴

 

至此我們就可以應用 Lombok 提供的注解干些事情了。

Lombok注解詳解

Lombok官網提供了許多注解,但是 “勁酒雖好,可不要貪杯哦”,接下來逐一講解官網推薦使用的注解(有些注解和原有Java編寫方式沒太大差別的也沒有在此處列舉,如@ Synchronized等)

 

@Getter和@Setter

該注解可應用在類或成員變量之上,和我們預想的一樣,@Getter 和 @Setter 就是為成員變量自動生成 get 和 set 方法,默認生成訪問權限為 public 方法,當然我們也可以指定訪問權限 protected 等,如下圖:

 

成員變量name指定生成set方法,并且訪問權限為protected;boolean類型的成員變量 female 只生成get方法,并修改方法名稱為 isFemale()。當把該注解應用在類上,默認為所有非靜態成員變量生成 get 和 set 方法,也可以通過 AccessLevel.NONE 手動禁止生成get或set方法,如下圖:

 

@ToString

該注解需應用在類上,為我們生成 Object 的 toString 方法,而該注解里面的幾個屬性能更加豐富我們想要的內容, exclude 屬性禁止在 toString 方法中使用某字段,而of屬性可以指定需要使用的字段,如下圖:

 

查看編譯后的Employee.class得到我們預期的結果,如下圖

 

@EqualsAndHashCode

該注解需應用在類上,使用該注解,lombok會為我們生成 equals(Object other) 和 hashcode() 方法,包括所有非靜態屬性和非transient的屬性,同樣該注解也可以通過 exclude 屬性排除某些字段,of 屬性指定某些字段,也可以通過 callSuper 屬性在重寫的方法中使用父類的字段,這樣我們可以更靈活的定義bean的比對,如下圖:

 

查看編譯后的Employee.class文件,如下圖:

 

@NonNull

該注解需應用在方法或構造器的參數上或屬性上,用來判斷參數的合法性,默認拋出 NullPointerException 異常

 

查看NonNullExample.class文件,會為我們拋出空指針異常,如下圖: 

 

當然我們可以通過指定異常類型拋出其他異常,lombok.nonNull.exceptionType = [NullPointerException | IllegalArgumentException] , 為實現此功能我們需要在項目的根目錄新建lombok.config文件:

 

重新編譯NonNullExample類,已經為我們拋出非法參數異常:

 

@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor

以上三個注解分別為我們生成無參構造器,指定參數構造器和包含所有參數的構造器,默認情況下,@RequiredArgsConstructor, @AllArgsConstructor 生成的構造器會對所有標記 @NonNull 的屬性做非空校驗。

無參構造器很好理解,我們主要看看后兩種,先看 @RequiredArgsConstructor

 

從上圖中我們可以看出, @RequiredArgsConstructor 注解生成有參數構造器時只會包含有 final 和 @NonNull 標識的 field,同時我們可以指定 staticName 通過生成靜態方法來構造對象

查看Employee.class文件

 

當我們把 staticName 屬性去掉我們來看遍以后的文件:

 

相信你已經注意到細節

@AllArgsConstructor 就更簡單了,請大家自行查看吧

@Data

介紹了以上的注解,再來介紹 @Data 就非常容易懂了,@Data 注解應用在類上,是@ToString, @EqualsAndHashCode, @Getter / @Setter 和 @RequiredArgsConstructor合力的體現,如下圖:

 

@Builder

函數式編程或者說流式的操作越來越流行,應用在大多數語言中,讓程序更具更簡介,可讀性更高,編寫更連貫,@Builder就帶來了這個功能,生成一系列的builder API,該注解也需要應用在類上,看下面的例子就會更加清晰明了。

 

編譯后的Employee.class文件如下:

 

媽媽再也不用擔心我 set 值那么麻煩了,流式操作搞定:

 

@Log

該注解需要應用到類上,在編寫服務層,需要添加一些日志,以便定位問題,我們通常會定義一個靜態常量Logger,然后應用到我們想日志的地方,現在一個注解就可以實現:

 

查看class文件,和我們預想的一樣:

 

Log有很多變種,CommonLog,Log4j,Log4j2,Slf4j等,lombok依舊良好的通過變種注解做良好的支持:

 

我實際使用的是 @Slf4j 注解

val

熟悉 Javascript 的同學都知道,var 可以定義任何類型的變量,而在 java 的實現中我們需要指定具體變量的類型,而 val 讓我們擺脫指定,編譯之后就精準匹配上類型,默認是 final 類型,就像 java8 的函數式表達式,()->System.out.println(“hello lombok”); 就可以解析到Runnable函數式接口。

 

查看解析后的class文件:

 

@Cleanup

當我們對流進行操作,我們通常需要調用 close 方法來關閉或結束某資源,而 @Cleanup 注解可以幫助我們調用 close 方法,并且放到 try/finally 處理塊中,如下圖:

 

編譯后的class文件如下,我們發現被try/finally包圍處理,并調用了流的close方法

 

其實在 JDK1.7 之后就有了 try-with-resource,不用我們顯式的關閉流,這個請大家自行看吧

總結

Lombok的基本操作流程是這樣的:

  1. 定義編譯期的注解
  2. 利用JSR269 api(Pluggable Annotation Processing API )創建編譯期的注解處理器
  3. 利用tools.jar的javac api處理AST(抽象語法樹)
  4. 將功能注冊進jar包

 

Lombok 當然還有很多注解,我推薦使用以上就足夠了,這個工具是帶來便利的,而不能被其捆綁,“弱水三千只取一瓢飲,代碼千萬需抓重點看”,Lombok 能讓我更加專注有效代碼排除意義微小的障眼代碼(get,set等),另外Lombok生成的代碼還能像使用工具類一樣方便(@Builder)。

 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2023-02-03 08:21:55

2020-11-10 08:54:55

Lombok

2009-09-07 22:29:04

LINQ組合查詢

2011-01-24 13:20:49

2010-03-17 14:22:40

Java Socket

2013-12-10 09:13:19

FreneticPyreticOpenFlow

2021-07-13 07:31:26

Springboot編程事務管理

2011-06-24 17:22:29

Qt Quick QML

2011-01-04 09:34:23

LambdaC#

2020-07-07 09:19:01

LombokJava IDE

2021-09-29 06:28:12

Lombok團隊語言

2010-04-30 09:19:05

Servlet 3.0

2024-01-11 13:21:53

開發代碼

2021-03-10 09:20:31

await代碼前端

2017-04-05 15:45:20

2009-06-22 14:26:12

ScalaXML對象

2015-09-09 08:45:49

JavaThreadLocal

2020-02-13 08:08:23

禁止使用Lombok

2020-02-12 14:03:25

實用Java工具

2022-08-25 11:00:19

編程系統
點贊
收藏

51CTO技術棧公眾號

91丨九色丨蝌蚪丨老版| 国产综合在线视频| 日韩中文字幕91| 盗摄牛牛av影视一区二区| 免费播放片a高清在线观看| 天堂…中文在线最新版在线| 97人人模人人爽人人少妇| 亚洲国产小视频在线观看| 亚洲精品第1页| 99精品视频中文字幕| 丝瓜av网站精品一区二区| 国产精品久久久久久麻豆一区软件| 欧洲一区在线| 黄色精品视频网站| 91福利区在线观看| 九义人在线观看完整免费版电视剧| 77777在线| 国产欧美高清在线| 51xx午夜影福利| 一级中文字幕一区二区| 久久精品久久99精品久久| 日韩精品乱码av一区二区| 欧洲美女日日| 亚洲v国产v在线观看| 国产精品777| 国产精品狼人色视频一区| 美日韩丰满少妇在线观看| 亚洲精品有码在线| 亚洲最新中文字幕| 日韩av影片在线观看| 欧美大胆人体bbbb| 精品福利av导航| 国产午夜精品麻豆| 亚洲欧美一区二区三区情侣bbw| 日韩精品在线观看网站| 国产一区二区三区欧美| 成年无码av片在线| av男人天堂一区| 亚洲一级淫片| 一本色道久久综合亚洲精品高清 | 午夜久久中文| 欧美视频三区| 全国精品免费看| 欧美午夜电影在线观看 | 激情视频一区二区三区| 日本vs亚洲vs韩国一区三区二区| 国产酒店精品激情| 久久久九九九九| 色综合久久88色综合天天6| 精品久久久三级丝袜| 在线播放国产精品| 91成人在线观看国产| 狠狠色综合网站久久久久久久| 成人午夜视频免费观看| 丁香花高清视频完整版在线观看| 国产三区四区在线观看| 国产精品极品美女在线观看| 欧洲精品视频在线| 日韩 欧美 自拍| 女人裸体免费网站| 中文字幕在线视频网站| 波多野结衣的一区二区三区| 国产乱人伦精品一区二区在线观看| 日本一区二区三级电影在线观看| 黄网动漫久久久| 久久精品在线视频| 欧美午夜精品理论片a级大开眼界| 一本久道中文无码字幕av| av文字幕在线观看| 欧美精品羞羞答答| 国产丶欧美丶日本不卡视频| 色婷婷精品久久二区二区蜜臂av| 中文字幕亚洲综合久久| 高清不卡日本v二区在线| 妓院一钑片免看黄大片| 9999精品成人免费毛片在线看 | 999精品视频在线| 国产在线激情| 影音先锋日韩在线| 亚洲综合清纯丝袜自拍| 久久久精品视频成人| 欧美在线一二三区| 无线免费在线视频| 天美av一区二区三区久久| 国产福利一区在线观看| 欧美一二区视频| 97人人做人人人难人人做| ts人妖交友网站| 天堂av一区| 91丨国产丨九色丨pron| 综合网中文字幕| 全黄性性激高免费视频| 超碰一区二区| 国产精品一区二区男女羞羞无遮挡| 国产综合激情| 亚洲永久在线| 7777精品伊人久久久大香线蕉经典版下载 | 无遮挡动作视频在线观看免费入口 | 久久美女性网| 欧美精品一卡两卡| 午夜视频在线观看一区二区 | 伊人久久大香线| 亚洲免费在线观看视频| 国产精品av免费在线观看| www.4438全国最大| 久久综合欧美| 精品久久久精品| 91午夜理伦私人影院| 69久久精品| 免播放器亚洲| 日韩福利视频在线观看| 久久香蕉视频网站| 久草综合在线| 国产精品女主播在线观看| 国产精品久久一区主播| av在线电影网| 久久精品国产久精国产爱| 国产成人视屏| 亚洲成在线观看| 欧美精品中文字幕一区二区| 看黄在线观看| 久久这里只有精品首页| 国产精品视频一区二区高潮| 麻豆传媒视频在线| 成人在线视频一区| 国产欧美一区二区三区久久人妖 | 国产乱码精品一区二区三区日韩精品| 尤物在线网址| 国产欧美视频一区二区| 成人写真视频福利网| 黄网在线免费看| 中文字幕一区二区三区视频| 超碰97在线人人| 毛片无码国产| 欧美性猛交xxxx黑人猛交| 男人天堂成人网| 天天做天天爱综合| 国产一区二区三区精品久久久| 满满都是荷尔蒙韩剧在线观看| 亚洲欧美日本视频在线观看| 国模精品视频一区二区| 尤物网在线观看| 国产精品国产精品国产专区不蜜| 精品国产电影| 丝袜连裤袜欧美激情日韩| 精品人在线二区三区| 日日躁夜夜躁人人揉av五月天| 国产精品一区二区免费不卡| 国产一区二区高清视频| 国产精品流白浆在线观看| 亚洲午夜色婷婷在线| 亚洲视频精品在线观看| 久久久久久久久久久电影| 开心色怡人综合网站| 欧美精品一区二区三区精品| 久久av红桃一区二区小说| 3d玉蒲团在线观看| 一本大道久久a久久精品综合| 国产又粗又长又大的视频| 国产麻豆成人传媒免费观看| 亚洲aa在线观看| 精品欧美激情在线观看| 国内免费久久久久久久久久久 | 激情av综合| 久久久久北条麻妃免费看| 18视频在线观看| 51精品久久久久久久蜜臀| 最新在线地址| 亚洲精品久久久蜜桃| 二区视频在线| 综合久久久久综合| 成人免费黄色网址| 久久久久久久综合日本| 少妇高潮喷水在线观看| 94色蜜桃网一区二区三区| 欧美大片在线播放| 成人综合激情网| 国产精品va在线观看无码| 国产69精品久久777的优势| 91免费视频黄| 成人av资源在线观看| 不要播放器的av网站| 中文字幕佐山爱一区二区免费| 男裸体无遮挡网站| 亚洲国产精品尤物yw在线观看| 国产在线制服美女| 欧美午夜精品久久久久久人妖| 日本aⅴ写真网站免费| 亚洲午夜激情网站| 国产高清av在线| 亚洲精品国产suv| 亚洲爽爆av| 国产精品视频地址| 亚洲精品极品| 最近免费观看高清韩国日本大全| gogo大胆日本视频一区| 中文字幕视频在线免费观看| 亚洲二区在线观看| 福利成人导航| 97成人精品视频在线观看|