1. 程式人生 > >lombok安裝和使用

lombok安裝和使用

1,eclipse安裝lombok外掛參考:https://blog.csdn.net/dorothy1224/article/details/79280591/

2,IDEA安裝lombok外掛參考:https://blog.csdn.net/zhglance/article/details/54931430

3,新增lombok的maven的pom.xml依賴:

  1. <dependency>  
  2.           <groupId>org.projectlombok</groupId>  
  3.           <artifactId>lombok</artifactId>  
  4.           <version>1.16.10</version>  
  5. </dependency>  

4,lombok的使用

    1)重寫實體類的get,set,toString方法

  1. @Setter
  2. @Getter
  3. @ToString
  4. @EqualsAndHashCode
  5. publicclass Student {  
  6.     private String name;  
  7.     privateint age;  
  8.     private String male;  
  9.     private String studentNo;  
  10. }  

   注意:@ToString(doNotUseGetters = true)通過向ToString註解新增doNotUseGetters 屬性可以使得重寫toString方法時,直接使用屬性和屬性值拼接

2)日誌使用

  1. @Slf4j
  2. publicclass UserController {  
  3.      public sayHello(){
  4.          log.info("輸出日誌:{}",“日誌資訊”);  
  5. }
  6. }

3)Lombok提供註解方式來提高程式碼的簡潔性,常用註解有:

  • @Data : 註解在類上;包含了@ToString,@EqualsAndHashCode,@Getter / @Setter和@RequiredArgsConstructor的功能,提供類所有屬性的 getter 和 setter 方法,此外還提供了equals、canEqual、hashCode、toString 方法
  • @Setter @Getter: 註解在屬性上;為屬性提供 getter setter 方法
  • @NonNull:註解在屬性上;標識屬性是不能為空,為空則丟擲異常。
  • @Synchronized : 加在方法上相當於在方法中新增同步塊。
  • @ToString:註解在類上;生成toString()方法,預設情況下,它會按順序(以逗號分隔)列印你的類名稱以及每個欄位。可以這樣設定不包含哪些欄位@ToString(exclude = "id") / @ToString(exclude = {"id","name"})
  • @EqualsAndHashCode:註解在類上;生成hashCode()和equals()方法,預設情況下,它將使用所有非靜態,非transient欄位。但可以通過在可選的exclude引數中來排除更多欄位。或者,通過在parameter引數中命名它們來準確指定希望使用哪些欄位。
  • @Cleanup : 修飾流物件,就不用手動的關閉流物件了
  • @SneakyThrows :用在方法上,如果不想try-catch異常,只想丟擲異常用@SneakyThrows註解
  • @Slf4j : 註解在類上;根據使用者實際使用的日誌框架生成log日誌物件。
  • @NoArgsConstructor:註解在類上;為類提供一個無參的構造方法。當類中有final欄位沒有被初始化時,編譯器會報錯,此時可用@NoArgsConstructor(force = true),然後就會為沒有初始化的final欄位設定預設值 0 / false / null。對於具有約束的欄位(例如@NonNull欄位),不會生成檢查或分配,因此請注意,正確初始化這些欄位之前,這些約束無效。

  • @AllArgsConstructor:註解在類上;為類提供一個全參的構造方法

    預設生成的方法是public的,如果要修改方法修飾符可以設定AccessLevel的值,例如:@Getter(access = AccessLevel.PROTECTED)

  • @RequiredArgsConstructor:註解在類上;會生成構造方法(可能帶引數也可能不帶引數),如果帶引數,這引數只能是以final修飾的未經初始化的欄位,或者是以@NonNull註解的未經初始化的欄位@RequiredArgsConstructor(staticName = "of")會生成一個of()的靜態方法,並把構造方法設定為私有的。

  • @Log4j :註解在類上;為類提供一個 屬性名為log 的 log4j 日誌物件

下面分別介紹每個方法的作用以及對應的原始碼 @Data
該註解相當於同時加上以下註解@Setter @Getter,@ToString,@EqualsAndHashCode,作用於類中 使用:

/**
 * author: renpl
 * blog: www.andyqian.com
 */
@Data
public class Person {
    private String name;
    private String address;
    private String city;
    private String state;
    private String zip;
    private Date brithday;
}

效果如下:

@[email protected]
作用於屬性上,自動生成get,set方法.

/**
 * author:renpl
 * blog: www.andyqian.com
 */
public class Person {
    @Getter@Setter
    private String name;
}

等價原始碼:

public String getName() {
        return name;
    }

public void setName(String name) {
        this.name = name;
}

@NonNull
該註解快速判斷是否為空,如果為空,則丟擲java.lang.NullPointerException
使用方法:

/**
 * author: renpl
 * blog: www.andyqian.com
 */
public class Person {

    private String name;
    
    @Setter@Getter@NonNull
    private List<Person> member;
}

原始碼:

@NonNull
private List<Person> members;

public Family(@NonNull final List<Person> members) {
    if (members == null) throw new java.lang.NullPointerException("members");
    this.members = members;
}
    
@NonNull
public List<Person> getMembers() {
    return members;
}

public void setMembers(@NonNull final List<Person> members) {
    if (members == null) throw new java.lang.NullPointerException("members");
    this.members = members;
}

@Synchronized
該註解自動新增到同步機制,有趣的是,生成的程式碼並不是直接鎖方法,而是鎖程式碼塊, 作用範圍是方法上
使用方法:

private DateFormat format = new SimpleDateFormat("MM-dd-YYYY");

@Synchronized
public String synchronizedFormat(Date date) {
    return format.format(date);
}

生成等價原始碼:

private final java.lang.Object $lock = new java.lang.Object[0];
private DateFormat format = new SimpleDateFormat("MM-dd-YYYY");

public String synchronizedFormat(Date date) {
    synchronized ($lock) {
        return format.format(date);
    }
}

@ToString
該方法大家應該非常熟悉,但需要注意的是:@ToString有多個屬性可以進一步設定:

  • callSuper 是否輸出父類的toString方法,預設為false
  • includeFieldNames 是否包含欄位名稱,預設為true
  • exclude 排除生成tostring的欄位

使用方法:

/**
 * author: renpl
 * blog: www.andyqian.com
 */
@ToString(callSuper = true,exclude ={"name"})
public class Person {
    private String name;
    private String address;
    
}

等價原始碼:

public String toString() {
 return "Person{" +
                "address='" + address + '\'' +
    '}';
}

@Cleanup
註釋可用於確保已分配的資源被釋放,如IO的連線關閉。
使用方法:

public void testCleanUp() {
    try {
        @Cleanup ByteArrayOutputStream baos = new ByteArrayOutputStream();
        baos.write(new byte[] {'Y','e','s'});
        System.out.println(baos.toString());
    } catch (IOException e) {
        e.printStackTrace();
    }
}

等價原始碼:

public void testCleanUp() {
    try {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try {
            baos.write(new byte[]{'Y', 'e', 's'});
            System.out.println(baos.toString());
        } finally {
            baos.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

參考:http://jnb.ociweb.com/jnb/jnbJan2010.html