一,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
= [ 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:爲每個需要特殊處理的字段生成一個帶有一個參數的構造函數。
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