使用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本质上提供的是一种“语法糖”,恰当使用可以简化编码工作,但是过度使用反而增加代码维护的复杂性。

参考文档

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