使用lombok減少編寫Java樣板代碼

使用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本質上提供的是一種“語法糖”,恰當使用可以簡化編碼工作,但是過度使用反而增加代碼維護的複雜性。

參考文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章