日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Idea使用Lombok简化实体类代码

發布時間:2025/7/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Idea使用Lombok简化实体类代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引入相應的maven包

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.18</version><scope>provided</scope> </dependency>

Lombok的scope=provided,說明它只在編譯階段生效,不需要打入包中。事實正是如此,Lombok在編譯期將帶Lombok注解的Java文件正確編譯為完整的Class文件。

IDEA添加對Lombok的支持

?點擊File-- Settings設置界面,安裝Lombok插件

點擊File-- Settings設置界面,開啟Annocation Processors

開啟該項是為了讓Lombok注解在編譯階段起到作用。

?Eclipse的Lombok插件安裝可以自行百度,也比較簡單,最好在官方下載最新版,網上有些版本可能會導致eclipse出現莫名其妙錯誤。

?Lombok實現原理

自從Java 6起,javac就支持“JSR 269 Pluggable Annotation Processing API”規范,只要程序實現了該API,就能在javac運行的時候得到調用。

Lombok就是一個實現了"JSR 269 API"的程序。在使用javac的過程中,它產生作用的具體流程如下:

  • javac對源代碼進行分析,生成一棵抽象語法樹(AST)

  • javac編譯過程中調用實現了JSR 269的Lombok程序

  • 此時Lombok就對第一步驟得到的AST進行處理,找到Lombok注解所在類對應的語法樹(AST),然后修改該語法樹(AST),增加Lombok注解定義的相應樹節點

  • javac使用修改后的抽象語法樹(AST)生成字節碼文件

  • ?Lombok注解的使用

    ?POJO類常用注解:

    @Getter/@Setter: 作用類上,生成所有成員變量的getter/setter方法;作用于成員變量上,生成該成員變量的getter/setter方法。可以設定訪問權限及是否懶加載等。

    1 package com.trace; 2 3 import lombok.AccessLevel; 4 import lombok.Getter; 5 import lombok.Setter; 6 7 /** 8 * Created by Trace on 2018/5/19.<br/> 9 * DESC: 測試類 10 */ 11 @SuppressWarnings("unused") 12 public class TestClass { 13 14 public static void main(String[] args) { 15 16 } 17 18 19 @Getter(value = AccessLevel.PUBLIC) 20 @Setter(value = AccessLevel.PUBLIC) 21 public static class Person { 22 private String name; 23 private int age; 24 private boolean friendly; 25 } 26 27 28 public static class Animal { 29 private String name; 30 private int age; 31 @Getter @Setter private boolean funny; 32 } 33 34 }

    在Structure視圖中,可以看到已經生成了getter/setter等方法

    ?

    編譯后的代碼如下:[這也是傳統Java編程需要編寫的樣板代碼]

    1 // 2 // Source code recreated from a .class file by IntelliJ IDEA 3 // (powered by Fernflower decompiler) 4 // 5 6 package com.trace; 7 8 public class TestClass { 9 public TestClass() { 10 } 11 12 public static void main(String[] args) { 13 } 14 15 public static class Animal { 16 private String name; 17 private int age; 18 private boolean funny; 19 20 public Animal() { 21 } 22 23 public boolean isFunny() { 24 return this.funny; 25 } 26 27 public void setFunny(boolean funny) { 28 this.funny = funny; 29 } 30 } 31 32 public static class Person { 33 private String name; 34 private int age; 35 private boolean friendly; 36 37 public Person() { 38 } 39 40 public String getName() { 41 return this.name; 42 } 43 44 public int getAge() { 45 return this.age; 46 } 47 48 public boolean isFriendly() { 49 return this.friendly; 50 } 51 52 public void setName(String name) { 53 this.name = name; 54 } 55 56 public void setAge(int age) { 57 this.age = age; 58 } 59 60 public void setFriendly(boolean friendly) { 61 this.friendly = friendly; 62 } 63 } 64 }

    @ToString:作用于類,覆蓋默認的toString()方法,可以通過of屬性限定顯示某些字段,通過exclude屬性排除某些字段。

    @EqualsAndHashCode:作用于類,覆蓋默認的equals和hashCode

    @NonNull:主要作用于成員變量和參數中,標識不能為空,否則拋出空指針異常。

    @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor:作用于類上,用于生成構造函數。有staticName、access等屬性。

    staticName屬性一旦設定,將采用靜態方法的方式生成實例,access屬性可以限定訪問權限。

    @NoArgsConstructor:生成無參構造器;

    @RequiredArgsConstructor:生成包含final和@NonNull注解的成員變量的構造器;

    @AllArgsConstructor:生成全參構造器。

    編譯后結果

    1 public static class Person { 2 @NonNull 3 private String name; 4 private int age; 5 private boolean friendly; 6 7 public String toString() { 8 return "TestClass.Person(name=" + this.getName() + ", age=" + this.getAge() + ")"; 9 } 10 11 @NonNull 12 public String getName() { 13 return this.name; 14 } 15 16 public int getAge() { 17 return this.age; 18 } 19 20 public boolean isFriendly() { 21 return this.friendly; 22 } 23 24 public void setName(@NonNull String name) { 25 if(name == null) { 26 throw new NullPointerException("name"); 27 } else { 28 this.name = name; 29 } 30 } 31 32 public void setAge(int age) { 33 this.age = age; 34 } 35 36 public void setFriendly(boolean friendly) { 37 this.friendly = friendly; 38 } 39 40 private Person() { 41 } 42 43 private static TestClass.Person of() { 44 return new TestClass.Person(); 45 } 46 47 @ConstructorProperties({"name"}) 48 Person(@NonNull String name) { 49 if(name == null) { 50 throw new NullPointerException("name"); 51 } else { 52 this.name = name; 53 } 54 } 55 56 @ConstructorProperties({"name", "age", "friendly"}) 57 public Person(@NonNull String name, int age, boolean friendly) { 58 if(name == null) { 59 throw new NullPointerException("name"); 60 } else { 61 this.name = name; 62 this.age = age; 63 this.friendly = friendly; 64 } 65 } 66 }

    ?

    @Data:作用于類上,是以下注解的集合:@ToString @EqualsAndHashCode @Getter @Setter @RequiredArgsConstructor

    @Builder:作用于類上,將類轉變為建造者模式

    @Log:作用于類上,生成日志變量。針對不同的日志實現產品,有不同的注解

    ?

    其他重要注解:

    @Cleanup:自動關閉資源,針對實現了java.io.Closeable接口的對象有效,如:典型的IO流對象

    ?

    編譯后結果如下:

    ?

    @SneakyThrows:可以對受檢異常進行捕捉并拋出,可以改寫上述的main方法如下

    ?

    @Synchronized:作用于方法級別,可以替換synchronize關鍵字或lock鎖,用處不大

    原文作者:LiWenD正在掘金

    原文地址:https://juejin.im/post/5b00517cf265da0ba0636d4b

    轉載于:https://www.cnblogs.com/yanglei-xyz/p/idea_lombok.html

    總結

    以上是生活随笔為你收集整理的Idea使用Lombok简化实体类代码的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。