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