前提
這篇博文是這套Spring Boot學習筆記的第六篇——Lombok篇,主要內容包含通過Lombok工具減少實體類中的工作量。如果需要了解有關Spring Boot的綜述信息或博文的索引信息,請移步:
《綜述篇》
配置依賴
首先需要在pom.xml
中添加以下依賴:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
安裝插件
由於Lombok
採用了編譯期解析
的技術,所以在調試期
調用相應的方法IDE會報錯,所以必須安裝插件。
- 通過
File
->Settings
打開設置界面。 - 點擊
Plugins
進入插件選項卡。 - 在上方的搜索框輸入
Lombok
,結果中第一個就是,點擊Install
即可。
常用註解介紹
Lombok主要包含許多註解
,通過合理的使用,可以大幅度減少開發的工作量,最適合在POJO
中使用。
@Data
類註解,最常用的註解之一,功能強大。爲被註解的類的屬性生成setter/getter
、equals
、canEqual
、hashCode
、toString
等方法,對於final
屬性,則不會爲其生成setter
方法。
由於@Data
註解的功能粒度太大,其功能可以被以下的註解來分解:
@Getter
和@Setter
:用於獨立指定生成getter
和setter
。@EqualsAndHashCode
:用於生成equals
和hashCode
方法。- 默認使用非靜態(
static
)和非瞬態(transient
)字段生成。 - 可使用
exclude
屬性排除一些字段。 - 可使用
of
屬性指定只用某些字段。 - 默認不調用父類的方法,可使用
callSuper = true
來使其生成的方法調用父類的方法。
- 默認使用非靜態(
@ToString
:用於生成toString
方法。- 舉例說明,如以下的類:
@Getter @Setter @ToString
public class User {
private int id;
private String name;
}
構造一個對象並調用toString
public static void main(String[] args) {
User user = new User();
user.setId(1);
user.setName("Imple");
System.out.println(user.toString());
}
輸出如下:
User(id=1, name=Imple)
@ToString
同樣有exclude
、of
和callSuper
等屬性,作用和@EqualsAndHashCode
的類似。
@NoArgsConstructor
生成無參構造方法,如:
public class User {
private int id;
private String name;
public User(){}
}
@AllArgsConstructor
生成全參構造方法,如:
public class User {
private int id;
private String name;
public User(int id, String name){
this.id = id;
this.name = name;
}
}
@Builder
建造者模式,爲類生成Builder內部類,創建對象的示例:
User user = new UserBuilder()
.id(1)
.name("Imple")
.build();
@Cleanup
自動調用對象的close
方法,也即目標類必須實現AutoCloseable
接口。作用相當於try-with-resources
,但是選用註解會讓代碼看起來更加整潔。
@NonNull
方法參數註解,如果加了註解的參數被傳入了null
,會拋出空指針異常。
@Slf4j
日誌類註解還有很多哦,基本上是與市面上的日誌框架對等的,使用哪個根據工程中的配置和依賴。它的作用相當於:
private final Logger log = LoggerFactory.getLogger(當前類名.class);
加上註解後可以直接在代碼中調用log
對象來輸出日誌。
後記
可以看到Lombok的開發者相當於做了個大的抽象,把程序中具有一定格式或模式的代碼抽象到對應的註解當中,盡最大可能幫助我們來減少編碼的工作量。由此我有一個有趣的想法,這些場景都比較符合具有橫切邏輯的場景
的定義,Lombok這樣是不是一定程序上搶了AOP
的飯碗了呢?哈哈。