微信公眾號:一個優秀的廢人 如有問題或建議,請後臺留言,我會盡力解決你的問題。
前言
上週去了開年會,去的地方是溫泉度假村。老實說,我是無感的,90% 是因為沒中獎(老闆太摳,兩百人只抽三個獎),10 % 是因為從小泡溫泉長大沒啥感覺。
LomBok 是什麼?
LomBok 是一個外掛,它能通過註解幫我們消除那些必須要寫但是重複的程式碼,比如setter,getter,建構函式之類的方法。
試想一個場景,在專案開發中,我們往往需要定義大量的資料庫實體或者某些工具 Bean ,每一個 Bean 都需要我們編寫 getter 、setter 方法、構造方法以及 toString 等方法。這是一個非常繁瑣的過程。程式設計師準則,做三遍以上的重複事情就必須想辦法讓它自動化了。所以今天給你們介紹一個牛逼的外掛「LomBok」。
LomBok 常用註解簡介
@Data:註解在類上,將類提供的所有屬性都新增get、set方法,並新增、equals、canEquals、hashCode、toString方法
@Setter:註解在類上,為所有屬性新增set方法、註解在屬性上為該屬性提供set方法
@Getter:註解在類上,為所有的屬性新增get方法、註解在屬性上為該屬性提供get方法
@NotNull:在引數中使用時,如果呼叫時傳了null值,就會丟擲空指標異常
@Synchronized 用於方法,可以鎖定指定的物件,如果不指定,則預設建立一個物件鎖定
@Log作用於類,建立一個log屬性
@Builder:使用builder模式建立物件
@NoArgsConstructor:建立一個無參建構函式
@AllArgsConstructor:建立一個全參建構函式
@ToStirng:建立一個toString方法
@Accessors(chain = true)使用鏈式設定屬性,set方法返回的是this物件。
@RequiredArgsConstructor:建立物件
@UtilityClass:工具類
@ExtensionMethod:設定父類
@FieldDefaults:設定屬性的使用範圍,如private、public等,也可以設定屬性是否被final修飾。
@Cleanup: 關閉流、連線點。
@EqualsAndHashCode:重寫equals和hashcode方法。
@toString:建立toString方法。
複製程式碼
如何安裝?
1、直接從 plugins.jetbrains.com/ 下載,然後放到IDEA 安裝檔案下面的 plugins,然後重啟 IDEA。
2、在 IDEA 的 settings(windows)或者Preferences(mac),下找到 plugins 選單,點選 Browse repositories,如下圖
第二步搜尋 LomBok 點選 Install (我這裡已經安裝了,但是有更新。所以顯示的是 Update 按鈕)重啟 IDEA 。
程式碼演示
新建 SpringBoot 專案,不會構建的看這篇文章 使用 IDEA 構建 Spring Boot 工程 ,構建時勾選 web 依賴和 Lombok 依賴,完整 pom 如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.nasus</groupId>
<artifactId>lombok</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>lombok</name>
<description>lombok_demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
複製程式碼
新建一個 Student 類,這是使用 lombok 的類,程式碼如下:
package com.nasus.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* Project Name:springboot_lomnok_demo <br/>
* Package Name:com.nasus.entity <br/>
* Date:2019/1/23 0023 14:32 <br/>
* <b>Description:</b> TODO: 描述該類的作用 <br/>
*
* @author <a href="mailto:chenzy@eastcom-sw.com">chenzy</a><br/>
* Copyright Notice =========================================================
* This file contains proprietary information of Eastcom Technologies Co. Ltd.
* Copying or reproduction without prior written approval is prohibited.
* Copyright (c) 2019 =======================================================
*/
@Data //自動生成set/get方法,toString方法,equals方法,hashCode方法,不帶引數的構造方法
@AllArgsConstructor //自動生成構造方法
@NoArgsConstructor //自動生成構造方法
public class Student {
private String id;
private String name;
private int age;
}
複製程式碼
新建一個 StudentNoLombok 類,這是沒有使用 lombok 的類(此類在專案中無用處,只為與使用 Lombok 的類對比,突出使用 LomBok 類程式碼的簡潔),程式碼如下:
package com.nasus.entity;
import java.util.Objects;
/**
* Project Name:springboot_lomnok_demo <br/>
* Package Name:com.nasus.entity <br/>
* Date:2019/1/23 0023 14:34 <br/>
* <b>Description:</b> TODO: 描述該類的作用 <br/>
*
* @author <a href="mailto:chenzy@eastcom-sw.com">chenzy</a><br/>
* Copyright Notice =========================================================
* This file contains proprietary information of Eastcom Technologies Co. Ltd.
* Copying or reproduction without prior written approval is prohibited.
* Copyright (c) 2019 =======================================================
*/
public class StudentNoLombok {
private String id;
private String name;
private int age;
public StudentNoLombok() {
}
public StudentNoLombok(String id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof StudentNoLombok)) {
return false;
}
StudentNoLombok that = (StudentNoLombok) o;
return age == that.age &&
Objects.equals(id, that.id) &&
Objects.equals(name, that.name);
}
@Override
public int hashCode() {
return Objects.hash(id, name, age);
}
@Override
public String toString() {
return "StudentNoLombok{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
複製程式碼
從上面兩個類對比可以看出,使用 LomBok 外掛的類比不使用簡潔美觀得多。
新建 StudentController 類,程式碼如下:
package com.nasus.controller;
import com.nasus.entity.Student;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Project Name:springboot_lomnok_demo <br/>
* Package Name:com.nasus.controller <br/>
* Date:2019/1/23 0023 14:37 <br/>
* <b>Description:</b> TODO: 描述該類的作用 <br/>
*
* @author <a href="mailto:chenzy@eastcom-sw.com">chenzy</a><br/>
* Copyright Notice =========================================================
* This file contains proprietary information of Eastcom Technologies Co. Ltd.
* Copying or reproduction without prior written approval is prohibited.
* Copyright (c) 2019 =======================================================
*/
@RestController
@RequestMapping("/student")
public class StudentController {
@GetMapping("/testLombok")
public Student getStudent(){
Student student = new Student();
student.setId("6666666666");
student.setAge(24);
student.setName("陳志遠");
System.out.println(student.toString());
return student;
}
}
複製程式碼
啟動專案,訪問地址 http://localhost:8080/student/testLombok 瀏覽器輸出如下:
控制檯輸出如下:
由上面兩個輸出結果可以看出,LomBok 外掛起作用了。即使 Student 沒有重寫 toString 方法,依然可以呼叫,而且結果和重寫了 toString 方法一樣。
當專案很龐大的時候,往往基礎的 Bean 也非常多。建議看到這篇文章的你可以在專案中把 LomBok 用起來。
最後奉上 專案完整程式碼
後語
以上就是我對 LomBok 外掛的理解與使用,希望對你們有幫助。最後,對 Python 、Java 感興趣請長按二維碼關注一波,我會努力帶給你們價值,如果覺得本文對你哪怕有一丁點幫助,請幫忙點好看,讓更多人知道。
另外,關注之後在傳送 1024 可領取免費學習資料。資料內容詳情請看這篇舊文:Python、C++、Java、Linux、Go、前端、演算法資料分享