lombok概述
- lombok簡介
Lombok想要解決了的是在我們實體Bean中大量的Getter/Setter方法,以及toString, hashCode等可能不會用到,但是某些時候仍然需要復寫,以期方便使用的方法;在使用Lombok之后,將由其來自動幫你實現代碼生成,注意,其是 在運行過程中,幫你自動生成的 。就是說,將極大減少你的代碼總量。 - lombok作用
消除模板代碼
getter、setter、構造器、toString()、equals()
便捷的生成比較復雜的代碼,例如一個POJO要轉化成構建器模式的形式,只需要一個注解。
SpringBoot中使用lombok
- 添加依賴
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
- 編寫一個實體類 User,使用@Data注解
@Data
public class User {
private String name;
private int age;
}
- 編寫測試方法,測試@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;
}