一、介紹
Lombok官網:https://projectlombok.org/
Lombok的功能簡單一點說,就是可以幫我們生成一些代碼,這些代碼並不是在源碼(source code)體現出來的,而是在字節碼文件中。
比如我們創建一個簡單的pojo,需要生成有參構造函數、無參構造函數、getter、setter、toString、hashCode、equals這些個方法,雖然通過IDE也是可以生成代碼的,但是,利用IDE生成的代碼有個問題:代碼量大、如果修改屬性名后,這些方法基本都得重新生成,不咋方便。
Lombox的功能:可以為我們生成上面說的那些方法,只需要我們在類名上使用相關注解即可。
二、導入jar包
這里使用Maven來導入依賴:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.8</version> <scope>provided</scope> </dependency>
注意,maven引入依賴是,scope是provided,也就是說,lombok包在運行時是不需要的,主要是在編譯的時候使用。
三、創建簡單pojo
這里舉個簡單的示例,就創建一個Person類:
import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.ToString; // 注意下面使用的幾個注解,都是Lombok提供的 @NoArgsConstructor @AllArgsConstructor @ToString @EqualsAndHashCode public class Person { // 創建三個屬性 private Integer id; private String name; private String addr; // 沒有使用IDE進行代碼生成,編譯源碼時,Lombok會自動在字節碼中生成方法(前面注解指定的那些方法) }
生成的代碼如下:
public class Person { private Integer id; private String name; private String addr; public Person() { } public Person(final Integer id, final String name, final String addr) { this.id = id; this.name = name; this.addr = addr; } public String toString() { return "Person(id=" + this.id + ", name=" + this.name + ", addr=" + this.addr + ")"; } public boolean equals(final Object o) { // 會調用下面canEqual方法 } protected boolean canEqual(final Object other) { return other instanceof Person; } public int hashCode() { // 計算出hashCode } }
四、Lombok常用的注解
下面是Lombok常用的注解:
@NoArgsConstructor // 生成無參構造函數 @AllArgsConstructor // 生成包含所有屬性的有參構造函數 @ToString // 生成toString方法 @EqualsAndHashCode // 生成equals和hashCode方法 @Getter // 為所有字段生成getter @Setter // 為所有字段生成setter @Data // 等價於 @NoArgsConstructor + @Getter + @Setter + @EqualsAndHashCode + @ToString @Slf4j // 自動生成log對象 @Builder // 生成Builder代碼(非Builder設計模式)
五、進行測試
創建測試類:
package cn.ganlixin.pojo; import org.junit.Test; public class TestPerson { @Test public void testCreatePerson() { // 雖然IDE提示下面的構造函數有錯誤,但是執行的時候,並不會報錯,而是會正常運行 Person person = new Person(1, "ganlixin", "beijing"); System.out.println(person); // 輸出 Person(id=1, name=ganlixin, addr=beijing) // 說明有參構造函數和toString方法已經生成了 } }
六、解決IDEA提示Lombok生成方法未定義的問題
6.1、問題描述
因為我們在使用Lombok的時候,Lombok為我們生成的代碼是在字節碼中(*.class),而不是在source code中,所以存在IDE提示Lombok生成的方法未定義的錯誤,導致項目不能正常編譯,但是我們都知道,這是沒問題的,只是IDE的問題。
比如,使用@Setter來注解一個類的時候,我們可以免於手動寫或者利用IDE生成每個屬性的Setter方法,因為Lombok會為在編項目的時候,掃描到@Setter方法,就會在字節碼中為屬性生成setter方法。但是,我們在代碼中調用一個該類實例對象的setter方法的時候,IDE就會提示沒有定義該方法,其實IDE也沒有錯,只是他不是根據字節碼中的方法來判斷的。
6.2、IDEA插件庫安裝
步驟:打開IDEA --> 打開Preferences --> 選擇Plugins,如下圖
安裝Lombok插件后,重啟IDEA即可。
6.3、下載插件安裝(針對IDEA)
如果在插件庫中沒有搜到Lombok,可以去通過本地安裝的方式,按照下面的步驟進行操作:
地址:https://github.com/mplushnikov/lombok-intellij-plugin/releases
根據版本下載一個zip包即可。
啟動IDEA,打開preferences,建議在IDEA的啟動界面打開preferences進行設置,因為這樣設置后是全局的,每個項目都可以使用。
選擇Plugins
打開右邊的設置,選擇Install Plugin from Disk
然后選擇第一步下載的zip包,點擊確認即可。
進入到Plugins,重啟IDEA即可
點擊Installed,可以看到上一步安裝的Lombok插件