文章目錄
使用lombok減少編寫Java樣板代碼
lombok用來簡化Java編程中的編寫樣板代碼(boilerplate code)的重複工作,比如POJO類中的setters/getters方法、構造方法、toString()方法、equals()方法和hashCode()方法,比如獲取日誌logger的方法等。
相比使用IDE的generate code功能,使用lombok可以在修改類屬性後,不需要再重新生成相應的方法代碼,使得代碼更爲簡潔。
引入lombok依賴
在pom.xml中添加lombok依賴:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
<scope>provided</scope>
</dependency>
lombok的scope爲provided
,即lombok依賴只在編譯階段生效,不會被打入包中。
因爲lombok在編譯期會將帶lombok註解的Java文件編譯爲完整的Class文件,因此在運行時並不需要lombok依賴。
安裝lombok插件
在IDEA中安裝lombok插件,使得IDEA可以支持lombok。
用@Data註解來修飾POJO類
參考:
https://projectlombok.org/features/Data
定義一個Person類,並使用@Data
註解修飾該類。
package me.cookcode.lombokdemo;
import lombok.Data;
import java.util.Date;
@Data
public class Person {
private final String firstName;
private final String lastName;
private String address;
private String city;
private String state;
private String zip;
private final Date dateOfBirth;
private boolean married;
private int age;
private float height;
}
在IDEA中按下ALT
+ 7
來打開一個類的Structure(大綱視圖,Outline)。
可以看到Person類中自動多了以下方法:
- setters/getters方法,對布爾值的字段自動轉換爲is開頭的方法
- 構造方法
- equals()方法
- hashCode()方法
- toString()方法
也可以使用@Setter
和@Getter
對屬性字段作更加精細的控制,比如控制屬性字段只讀、屬性字段方法的訪問級別。
Spring Boot + Spring Data JPA + Lombok + 自動化生成JPA Entity和Repository,可以大大地簡化Java數據庫編程。
用@Builder註解來支持流式編程
參考:
https://projectlombok.org/features/Builder
@Builder和@Data配合食用,效果更佳呃,再也不用傻傻地寫return this;
了。
用@Slf4j註解來引入logger
參考:
https://projectlombok.org/features/log
使用@Slf4j
後,可以直接使用log.info(),或log.debug(),或log.error()方法,而不用每個類中都要定義一次logger:
private final Logger log = LoggerFactory.getLogger(AccessingDataMysqlApplication.class)
示例:
package me.cookcode.accessingdatamysql;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@Slf4j
@SpringBootApplication
public class AccessingDataMysqlApplication {
public static void main(String[] args) {
log.info("Start AccessingDataMysqlApplication...");
SpringApplication.run(AccessingDataMysqlApplication.class, args);
}
}
其它用法
lombok的特性列表:
https://projectlombok.org/features
需要注意的是lombok本質上提供的是一種“語法糖”,恰當使用可以簡化編碼工作,但是過度使用反而增加代碼維護的複雜性。