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是模塊的意思,還沒仔細思考其使用的含義。

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

        要將註釋放在生成的方法上,可以使用onMethod=@__({@AnnotationsHere})要將註釋放在生成的setter方法的唯一參數上,可以使用onParam=@__({@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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章