Spring Boot學習筆記(六)——Lombok篇


前提

這篇博文是這套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插件

常用註解介紹

Lombok主要包含許多註解,通過合理的使用,可以大幅度減少開發的工作量,最適合在POJO中使用。

@Data

類註解,最常用的註解之一,功能強大。爲被註解的類的屬性生成setter/getterequalscanEqualhashCodetoString等方法,對於final屬性,則不會爲其生成setter方法。

由於@Data註解的功能粒度太大,其功能可以被以下的註解來分解:

  • @Getter@Setter:用於獨立指定生成gettersetter
  • @EqualsAndHashCode:用於生成equalshashCode方法。
    • 默認使用非靜態(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同樣有excludeofcallSuper等屬性,作用和@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的飯碗了呢?哈哈。

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