優雅的使用Lombok進行代碼開發

優雅的使用Lombok進行代碼開發

  • 首先使用Lombok IDE需要配合使用lombok插件

    • 插件下載
    • Eclipse安裝Lombok 插件:
      • 第一步使用cmd 進入剛纔下載的 lombok.jar 目錄中 使用命令java -jar lombok.jar( 前提是你的計算機中已經安裝jdk並配置環境變量)
      • 出現如下窗口
        在這裏插入圖片描述
      • 進入eclipse的安裝目錄中如果出現一個lombok.jar的jar包表示安裝成功
    • IDEA 安裝插件
      • IDEA中無需下載lombok包 在IDEA插件市場搜索lombok 點擊安裝即可(由於較簡單步驟不再列出)
  • 在項目中安裝lombok依賴

    • Maven 安裝依賴
      <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <version>1.18.6</version>
          <scope>provided</scope>
      </dependency>
      
    • Gradle 安裝依賴
      // https://mvnrepository.com/artifact/org.projectlombok/lombok
      provided group: 'org.projectlombok', name: 'lombok', version: '1.18.6'
      
  • 代碼展示

    • 未使用lombok
      public class Person {
        private String id;
        private String name;
      
        public String getId() {
            return id;
        }
      
        public void setId(String id) {
            this.id = id;
        }
      }
      
    • 使用lombok
      @Data
       public class Person {
           private String id;
           private String name;
       }
      
      以上只是使用了Lombok的 @Data 註解 還有其他註解下面簡單介紹一下
  • 常用註解說明

    說明
    val 用在局部變量前面,相當於將變量聲明爲final
    @NonNull 給方法參數增加這個註解會自動在方法內對該參數進行是否爲空的校驗,如果爲空,則拋出NPE(NullPointerException)
    @Cleanup 自動管理資源,用在局部變量之前,在當前變量範圍內即將執行完畢退出之前會自動清理資源,自動生成try-finally這樣的代碼來關閉流
    @Getter/@Setter 用在屬性上,再也不用自己手寫setter和getter方法了,還可以指定訪問範圍
    @ToString 用在類上,可以自動覆寫toString方法,當然還可以加其他參數,例如@ToString(exclude=”id”)排除id屬性,或者@ToString(callSuper=true, includeFieldNames=true)調用父類的toString方法,包含所有屬性
    @EqualsAndHashCode 用在類上,自動生成equals方法和hashCode方法
    @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor 用在類上,自動生成無參構造和使用所有參數的構造函數以及把所有@NonNull屬性作爲參數的構造函數,如果指定staticName = “of”參數,同時還會生成一個返回類對象的靜態工廠方法,比使用構造函數方便很多
    @Data 註解在類上,相當於同時使用了@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstrutor這些註解,對於POJO類十分有用
    @Value 用在類上,是@Data的不可變形式,相當於爲屬性添加final聲明,只提供getter方法,而不提供setter方法
    @Builder 用在類、構造器、方法上,爲你提供複雜的builder APIs,讓你可以像如下方式一樣調用Person.builder().name(“Adam Savage”).city(“San Francisco”).job(“Mythbusters”).job(“Unchained Reaction”).build();更多說明參考Builder
    @SneakyThrows 自動拋受檢異常,而無需顯式在方法上使用throws語句
    @Synchronized 用在方法上,將方法聲明爲同步的,並自動加鎖,而鎖對象是一個私有的屬性locklock或LOCK,而java中的synchronized關鍵字鎖對象是this,鎖在this或者自己的類對象上存在副作用,就是你不能阻止非受控代碼去鎖this或者類對象,這可能會導致競爭條件或者其它線程錯誤
    @Getter(lazy=true) 可以替代經典的Double Check Lock樣板代碼
    @Log 根據不同的註解生成不同類型的log對象,但是實例名稱都是log,有六種可選實現類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章