1. 程式人生 > >Lombok外掛安裝及使用說明

Lombok外掛安裝及使用說明

一,Lombok簡介

        Lombok是用於消除程式碼,使程式碼更加簡潔和快速。比如通過註解的方式來消除POJO的getter和setter方法,Lombok主要是通過註解的方式來使用的。比如在一個POJO中,一個屬性的getter和setter可通過@Getter和@Setter註解來取代,這樣程式碼量很少了,程式碼如下(注意看紅包標記的程式碼):

import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;

public class UserInfo  extends BaseEntity{

    @Id
    @Column(name = "Id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Getter
    @Setter
private Integer id; }

上面的程式碼與下面的程式碼是等價的。

import javax.persistence.*;

public class UserInfo  extends BaseEntity{

    @Id
    @Column(name = "Id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    public Integer getId() {
        return id;
  }
public void setId(Integer id) { this.id = id; }
}在編譯後,Lombok的@Getter和@Setter註解,會生成相應的getter和setter方法。

二,Lombok使用

    1,IDEA安裝Lombok外掛    

        先說下為什麼要安裝要在IDEA中安裝Lombok。如果在.java檔案中有@Getter,其實在編譯後的.class檔案會有屬性的getter方法,但如果不安裝外掛,那直接呼叫屬性的getter方法會失敗,雖然編譯的.class檔案有getter。但安裝外掛後就好了,不管是否編譯了都可以直接呼叫。

        我當時使用Lombok時是在IDEA中開發的,IDEA版本是2017.2,就以IDEA來進行說明。首先在IDEA中安裝Lombok外掛。依次點選File——>settings——>Plugins,如果搜尋不到Lombok外掛,則可以通過瀏覽器栻來安裝,操作如下圖。


        點選“Browse repositonies”後,會彈出新的介面,然後造反“Lombok Plugin”,然後點選右上角的“Install”來安裝外掛,如下圖所示。安裝成功後,IDEA會提示你重啟IDEA,重啟IDEA即可。


        2,Lombok註解詳細使用說明

        在使用時,首先要引入Lombok的jar包,程式碼如下:

        <!-- lombok依賴 -->
        <dependency>
	    <groupId>org.projectlombok</groupId>
	    <artifactId>lombok</artifactId>
	    <version>1.16.8</version>
	</dependency>
    下面通過先對註解解釋,然後附上程式碼的方法來進行描述Lombok的具體使用。同時將常用的註解放在最前面。

     1,@Getter/@Setter:用於生成getter/setter方法,可以用在類或者屬性上;若用在屬性上,則只是用於替代這個屬性的getter方法,如果是用在類上,則是用於替代這個類所有屬性的getter方法。還可通過@AccessLeve來控制生成的getter/setter方法的訪問許可權,Lombok提供了PUBLIC、PROTECTED、PACKAGE、PRIVATE、NONE 和MODULE六個值,前四個值分別是public、protected、包和private,這和Java的訪問控制權限是對應的,也很好理解,AccessLevel.NONE手動禁用對應欄位的getter和setter生成,MODULE是模組的意思,還沒仔細思考其使用的含義。

        官網上有一段說是下面這樣講的,但我還沒去看具體什麼回事,先貼出來可以看看。

        要將註釋放在生成的方法上,可以使用[email protected]__({@AnnotationsHere})要將註釋放在生成的setter方法的唯一引數上,可以使用[email protected]__({@AnnotationsHere})但要小心!這是一個實驗性功能。有關更多詳細資訊,請參閱onX( 地址t:tps://projectlombok.org/features/experimental/onX)功能的文件

    使用@Getter和@Setter註解之前的程式碼如下:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package com.woxin.itsm;

public class Person {
    private String username;
    private String sex;
    private String tel;

    public Person() {
    }

    public String getUsername() {
        return this.username;
    }

    private void setUsername(String username) {
        this.username = username;
    }

    public String getSex() {
        return this.sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    String getTel() {
        return this.tel;
    }
}

 使用之後的程式碼如下:

package com.woxin.itsm;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;

/**
 * @Author: Qinciwen
 * @Description:
 * @Date: Created in 10:54 2018/5/10
 * @Modified By:
 */

public class Person {

    @Getter
    @Setter(AccessLevel.PRIVATE)
    private String username;

    @Getter
    @Setter
    private String sex;

    @Getter(AccessLevel.MODULE)
    @Setter(AccessLevel.NONE)
    private String tel;

}

@Getter和@Setter還支援的一些配置如下,這些配置可以配置成全域性的。

lombok.accessors.chain= [ truefalse](預設值:false)

 如果設定為true,生成的setter將返回this(而不是void)。註釋的顯式配置chain引數@Accessors優先於此設定。lombok.accessors.fluent= [ truefalse](預設值:false)如果設定為true,生成的getter和setter將不會以“bean標準”作為字首getis或者set相反,這些方法將使用與該欄位相同的名稱(減字首)。註釋的顯式配置chain引數@Accessors優先於此設定。lombok.accessors.prefix+ = 欄位字首(預設:空列表)這是一個列表屬性; 條目可以與+=操作員一起新增-=操作員可以刪除父配置檔案中的繼承字首。Lombok將從欄位名稱中去除任何匹配的欄位字首,以確定要生成的getter / setter的名稱。例如,如果m是此設定中列出的字首之一,則名為的欄位mFoobar將導致名為getFoobar()not 的getter getMFoobar()註釋的顯式配置prefix引數@Accessors優先於此設定。lombok.getter.noIsPrefix= [ truefalse](預設值:false)如果設定為true,為boolean欄位生成的getter 將使用get字首而不是預設is字首,並且任何生成的呼叫getter的程式碼(如@ToString,)也將使用,get而不是islombok.setter.flagUsage= [ warningerror](預設:未設定)@Setter如果配置, Lombok將標記任何用作警告或錯誤。lombok.getter.flagUsage= [ warningerror](預設:未設定)

@Getter如果配置, Lombok將標記任何用作警告或錯誤。

另外,下面的說明也值得注意。

為了生成方法名稱,該欄位的第一個字元(如果是小寫字元)是標題封裝的,否則它將保持不變。然後,get / set / is是字首。

如果任何方法已經存在且名稱相同(不區分大小寫)且引數個數相同,則不會生成任何方法。例如,getFoo()如果已經有一種方法,getFoo(String... x)即使在技術上可行也不會生成該方法。這個警告的存在是為了防止混淆。如果由於這個原因跳過了方法的生成,則會發出警告。可變引數計為0到N引數。你可以標記任何方法@lombok.experimental.Tolerate來將它們從Lombok上隱藏起來。

對於緊跟著一個標題大小寫字母的boolean欄位is,沒有任何字首用於生成getter名稱。

任何變化boolean不會導致使用is字首而不使用get字首; 例如,返回java.lang.Boolean結果的get字首,而不是is字首。


    2,@AllArgsConstructor:用於生成全引數的建構函式,用在類上;@NoArgsContructor:用於生成無引數的建構函式,用在類上;@RequiredArgsContructor:為每個需要特殊處理的欄位生成一個帶有一個引數的建構函式。

      5,@NonNull:用於判斷是否==null,並丟擲異常,換句話說進行空值檢查;
      6,@Cleanup:用於關閉並釋放資源,可以用在IO流上;
      7,@Buinder:用於將類改造成builder(建造者)模式,用在類、方法或者建構函式上;
      8,@Data:是一個複合註解,用在類上,使用後會生成預設的無參建構函式、所有屬性的getter、所有非final屬性的setter方法,並重寫toString、equals、hashcode方法;
      9,val:用於變數上,所宣告的變數是final的;
      10,var:用於變數上,所宣告的變數是非final的;

官網:https://projectlombok.org/features/all