Lombok是一款Java代码功能增强库。它会自动集成到你的编辑器和构建工具中,从而使你的Java代码更加生动有趣。通过Lombok的注解,你可以不用再写getter、setter、equals等方法,Lombok将在编译时为你自动生成。
Lombok的集成
首先我们需要在IDEA中安装好Lombok插件,如果你使用的是IDEA 2020.3以上版本,则Lombok插件已经内置,无需安装。
之后在项目的pom.xml文件中添加Lombok依赖,SpringBoot 2.1.x版本后无需指定Lombok版本,SpringBoot在spring-boot-dependencies
中已经内置。
1 | <!--lombok依赖--> |
Lombok常用注解
val | 使用val注解可以取代任意类型作为局部变量,这样我们就不用写复杂的ArrayList和Map.Entry类型了。 |
@NonNull | 在方法上使用@NonNull注解可以做非空判断,如果传入空值的话会直接抛出NullPointerException。 |
@Cleanup | 当我们在Java中使用资源时,不可避免地需要在使用后关闭资源。使用@Cleanup注解可以自动关闭资源。 |
@Getter/@Setter | 有了@Getter/@Setter注解,我们再也不用编写getter/setter方法了。试想下之前即使我们使用IDEA自动生成getter/setter方法,如果类属性的类型和名称改了,又要重新生成getter/setter方法也是一件很麻烦的事情。 |
@ToString | 使用@ToString注解可以自动生成toString方法,默认会包含所有类属性,使用@ToString.Exclude注解可以排除属性的生成。 |
@EqualsAndHashCode | 使用@EqualsAndHashCode注解可以自动生成hashCode和equals方法,默认包含所有类属性,使用@EqualsAndHashCode.Exclude可以排除属性的生成。 |
@XxConstructor | 使用@XxConstructor注解可以自动生成构造方法,有@NoArgsConstructor、@RequiredArgsConstructor和@AllArgsConstructor三个注解可以使用。 |
@Data | @Data是一个方便使用的组合注解,是@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstructor的组合体。 |
@Value | 使用@Value注解可以把类声明为不可变的,声明后此类相当于final类,无法被继承,其属性也会变成final属性。 |
@Builder | 使用@Builder注解可以通过建造者模式来创建对象 |
@SneakyThrows | 自动抛出异常,无需处理 |
@Synchronized | 使用@Synchronized注解可以实现同步访问 |
@With | 使用@With注解可以实现对原对象进行克隆,并改变其一个属性,使用时需要指定全参构造方法。 |
@Getter(lazy=true) | 当我们获取某一个属性比较消耗资源时,可以给@Getter添加lazy=true属性实现懒加载,会生成Double Check Lock 样板代码对属性进行懒加载。 |
@Log | 使用@Log注解,可以直接生成日志对象log,通过log对象可以直接打印日志。 |
@Slf4j | 使用Lombok生成日志对象时,根据使用日志实现的不同,有多种注解可以使用。比如@Log、@Log4j、@Log4j2、@Slf4j等。 |
Lombok原理
打开target目录下的.class
文件,我们可以看到Lombok为我们生成的代码,可见Lombok是通过解析注解,然后在编译时生成代码来实现Java代码的功能增强的。
比如对于@getter与@Setter,Lombok可以在target中将其解析为具体的getter/setter方法。