1. 程式人生 > >springboot的lombok

springboot的lombok

name 比較 構建 study sync upload throw vat 功能

lombok概述

  • lombok簡介

    Lombok想要解決了的是在我們實體Bean中大量的Getter/Setter方法,以及toString, hashCode等可能不會用到,但是某些時候仍然需要復寫,以期方便使用的方法;在使用Lombok之後,將由其來自動幫你實現代碼生成,註意,其是 在運行過程中,幫你自動生成的 。就是說,將極大減少你的代碼總量。
  • lombok作用

    消除模板代碼

    getter、setter、構造器、toString()、equals()

    便捷的生成比較復雜的代碼,例如一個POJO要轉化成構建器模式的形式,只需要一個註解。

    SpringBoot中使用lombok

  1. 添加依賴
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.16.10</version>
</dependency>

 
  1. 編寫一個實體類 User,使用@Data註解
@Data
public class User {  
 private String name;  
 private int age;
}
  1. 編寫測試方法,測試@Data的作用
@Test
public void testUser(){  
  User user = new User();  
  user.setName("AnyCode");  
  user.setAge(20);  
  System.err.println(user.toString());
}

技術分享圖片

lombok的註解介紹

@NonNull : 讓你不在擔憂並且愛上NullPointerException


@CleanUp : 自動資源管理:不用再在finally中添加資源的close方法

@Setter/@Getter : 自動生成set和get方法

@ToString : 自動生成toString方法

@EqualsAndHashcode : 從對象的字段中生成hashCode和equals的實現

@NoArgsConstructor/@RequiredArgsConstructor/@AllArgsConstructor
自動生成構造方法

@Data : 自動生成set/get方法,toString方法,equals方法,hashCode方法,不帶參數的構造方法

@Value : 用於註解final類

@Builder : 產生復雜的構建器api類

@SneakyThrows : 異常處理(謹慎使用)

@Synchronized : 同步方法安全的轉化

@Getter(lazy=true) :

@Log : 支持各種logger對象,使用時用對應的註解,如:@Log4j

推薦使用技巧

  • 在 Bean / Entity 類上使用 @Data 註解。
  • 需要使用 Log 對象的地方使用 @Log4j(依項目日誌框架決定)。
  • 註意:lombok 的註解不能被繼承。

    IDEA中使用lombok

    如果想讓lombok生效我們還需要針對idea工具進行插件的安裝,下面我們按照順序打開Idea配置

    File > Settings > Plugins > Browse repositories... > 輸入lombok,插件就會被自動檢索出來,如下圖所示:
    技術分享圖片

    我的工具已經安裝了該插件,所有在右側是沒有任何按鈕的,如果你的工具沒有安裝該插件,

    右側會有一個綠色的按鈕,按鈕的內容則是Install,點擊安裝後重啟Idea就可以了。

    lombok常用註解詳解

  • @EqualsAndHashCode,@ToString :告訴Lombok來生成 equals, hashCode方法,toString方法

    在生成這些方法的時候lombok會使用所有的成員變量。
  • ** @AllArgsConstructor** :會自動創建一個包括所有成員的構造器。
  • @Getter/@Setter: 註解會為每一個標記的成員變量自動生成對應的方法。
  • 用例
package com.jxlg.lance.springbootcorestudy.lombok;

import lombok.*;

/**
 * @author lance(ZYH)
 * @function 測試其他註解
 * @date 2018-03-22 12:27
 */
@EqualsAndHashCode
@ToString
@AllArgsConstructor
public class Student {
    @Setter
    @Getter
    private String stuName;

    @Setter
    @Getter
    private Integer stuAge;

    @Setter
    @Getter
    private String stuClass;
    
    @Setter
    @Getter
    private Integer stuNumber;
}
  • 如果你不想將註解用在全部的成員變量上,而是僅僅部分變量上,那麽你可以提供一個指定的哪一個成員變量需要

    自動生成方法的變量。舉例: 比如在這裏,我們只想讓stuName,stuAge兩個成員變量出現在 toString 方法裏。
@EqualsAndHashCode
@ToString(of = {"stuName","stuAge"})
@AllArgsConstructor
public class Student {
    @Setter
    @Getter
    private String stuName;

    @Setter
    @Getter
    private Integer stuAge;

    @Setter
    @Getter
    private String stuClass;

    @Setter
    @Getter
    private Integer stuNumber;
}
  • 這些代碼已經比我們一開始要好太多了,但是它任然不夠簡潔。這裏重復了大量的 @Getter 和 @Setter 註解。

    如果你只是需要在Class中僅暴露幾個字段,那麽使用它們非常方便,但如果您需要為所有字段生成訪問器,則會變得煩人又無聊。

    為了使代碼更加簡潔, Lombok永續我們在類級上使用這些註解。如果這些註解放在類名之上,

    那麽lombok會自動為我們生成所有字段的訪問方法。
@EqualsAndHashCode
@ToString
@AllArgsConstructor
@Setter
@Getter
public class Student {
    private String stuName;

    private Integer stuAge;

    private String stuClass;

    private Integer stuNumber;
}

  • @Buidler :實例化這個類
  • 用例
@EqualsAndHashCode
@ToString
@AllArgsConstructor
@Setter
@Getter
@Builder
public class Student {
    private String stuName;

    private Integer stuAge;

    private String stuClass;

    private Integer stuNumber;
}

測試類:
package com.jxlg.lance.springbootcorestudy.lombok;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

import static org.junit.Assert.*;

@RunWith(JUnit4.class)
public class StudentTest {

    @Test
    public void test(){
        Student student = Student.builder()
                .stuName("張三")
                .stuAge(12)
                .stuClass("高三")
                .stuNumber(12222)
                .build();
        System.out.println(student);
    }
}


結果:
Student(stuName=張三, stuAge=12, stuClass=高三, stuNumber=12222)
  • @Data :簡單的來說所有所有的註解我們都可以使用一個註解完成.也就是@Data

    我們在定義類的時候 只需要加一個 @Data 註解,其他的註解我們都不需要在添加就可以達到前面所說的所有功能。
  • 通過上面介紹的,我們平常使用Lombok只需要這樣就是就可以了,如下:
@Data
@Builder
public class User {
    private String name;
    private Integer age;
}

 

springboot的lombok