Lombok是一種經過註解的方式減小JAVA實體類中大量冗餘代碼,諸如get、set以及構造方法等的Java庫java
1、安裝Lombokgit
步驟一 項目引入lombok插件github
1 - 非maven依賴託管項目再lib文件夾中添加lombok.jar包
2 - maven項目直接在項目pom.xml文件夾添加依賴
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.12</version>
</dependency>maven
步驟二 在Intellij idea或者Eclipse集成lombok插件讓他們能夠識別lombokide
Intellij idea
方式1、進入plugins->Browse repositories->輸入Lombok搜索插件,點擊install下載,這種方式目前嘗試過,下載失敗
方式2、進入github,搜索lombok for Intellij插件選擇Intellij idea對應版本的插件下載zip包,把解壓後的文件放到Intellij idea安裝目錄的插件庫即plugins文件夾下ui
2、使用教程this
1 - @Data註解做用於類中,至關於同時加入@Getter@Setter@ToString @EqualsAndHashCodeidea
@Data
public class UserInfoDTO implements Serializable{
/**用戶編號**/
private Long uid;spa
/**用戶姓名**/
private String uname;插件
/**年齡**/
private Integer age;
}
2 - @Getter@Setter 可在類和成員變量上使用,註解做用於屬性上用於自動生成get、set方法
public class UserInfoDTO implements Serializable{
/**用戶編號**/
@Getter
private Long uid;
@Setter
/**用戶姓名**/
private String uname;
/**年齡**/
private Integer age;
}
3 - @NonNull該註解用於判斷是否爲空,若是調用set方法設置爲空則拋出java.lang.NullPointerException
public class UserInfoDTO implements Serializable{
/**用戶編號**/
@Getter
private Long uid;
@Setter@NonNull
/**用戶姓名**/
private String uname;
/**年齡**/
private Integer age;
}
4 - @Synchronized該註解做用與方法自動添加同步機制,生成的源碼顯示生成的方法並不直接鎖方法而是鎖該方法下的代碼塊,鎖是對象鎖
5 -@ToString註解主要是做用於ToString方法,裏面能夠設置多個屬性
callSuper 是否輸出父類的toString方法
includeFieldNames 是否包含字段名稱,默認爲true
exclude排除生成的toString字段
@Getter
@Setter
@ToString(callSuper = false, includeFieldNames = true, exclude = "uid")
public class UserInfoDTO implements Serializable{
/**用戶編號**/
private Long uid;
/**用戶姓名**/
private String uname;
/**年齡**/
private Integer age;
}
lombok生成的等價源碼
public class UserInfoDTO implements Serializable {
private Long uid;
private String uname;
private Integer age;
public UserInfoDTO() {
}
public Long getUid() {
return this.uid;
}
public String getUname() {
return this.uname;
}
public Integer getAge() {
return this.age;
}
public void setUid(Long uid) {
this.uid = uid;
}
public void setUname(String uname) {
this.uname = uname;
}
public void setAge(Integer age) {
this.age = age;
}
public String toString() {
return "UserInfoDTO(uname=" + this.getUname() + ", age=" + this.getAge() + ")";
}
}
@Cleanup該註解用於確保已分配的資源被釋放,例如IO鏈接的關閉
public static void testCleanUp(){
try{
@Cleanup FileOutputStream bos = new FileOutputStream("test.txt");
bos.write(new byte[]{'A','B','C'});
}catch(IOException ex){
}
}
lombok生成的等價源碼
public static void testCleanUp() {
try {
FileOutputStream bos = new FileOutputStream("test.txt");
try {
bos.write(new byte[]{65, 66, 67});
} finally {
if(Collections.singletonList(bos).get(0) != null) {
bos.close();
}
}
} catch (IOException var5) {
;
}
}
看不懂爲何要先把文件輸出流對象放到一個單例集合裏面再去獲取它進行判空