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