Lombok插件的安装使用&Lombok常用注解

本文介绍Lombok如何通过注解减少Java开发中的冗余代码,包括getter/setter、toString等方法的自动生成,并列举了多种实用注解及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Lombok解决的问题

代码冗余。
以前的Java项目中,充斥着太多不友好的代码:POJO getter/setter/toString;异常处理;I/O流的关闭操作等等,这些样板代码既没有技术含量,又影响着代码的美观,Lombok应运而生。

二、使用

1.idea的settings下载安装Lombok插件

点击File-- Settings设置界面,开启 AnnocationProcessors:

开启该项是为了让Lombok注解在编译阶段起到作用。

2.pom中添加依赖

<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <version>1.16.16</version><!--版本号自己选一个就行-->
</dependency>

Lombok的scope=provided,说明它只在编译阶段生效,不需要打入包中。事实正是如此,Lombok在编译期将带Lombok注解的Java文件正确编译为完整的Class文件。

三、支持的注解

POJO类常用注解:
1.@Getter/@Setter:
作用类上,生成所有成员变量的getter/setter方法;作用于成员变量上,生成该成员变量的getter/setter方法。可以设定访问权限及是否懒加载等。

package com.kaplan.pojo;

import lombok.*;

import lombok.extern.log4j.Log4j;

@Getter

@Setter

public class TestDemo {

private String name;

private int age ; 

private String email;

private String address; 

private String password;

@Getter @Setter private boolean funny;

}

2.@ToString:
作用于类,覆盖默认的toString()方法,可以通过of属性限定显示某些字段,通过exclude属性排除某些字段。

3.@EqualsAndHashCode:
作用于类,覆盖默认的equals和hashCode

4.@NonNull:
主要作用于成员变量和参数中,标识不能为空,否则抛出空指针异常。

5.@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor:
作用于类上,用于生成构造函数。有staticName、access等属性。

staticName属性一旦设定,将采用静态方法的方式生成实例,access属性可以限定访问权限。

@NoArgsConstructor:生成无参构造器;

@RequiredArgsConstructor:生成包含final和@NonNull注解的成员变量的构造器;

@AllArgsConstructor:生成全参构造器

6.@Data:
作用于类上,是以下注解的集合:@ToString @EqualsAndHashCode @Getter @Setter @RequiredArgsConstructor

7.@Builder
作用于类上,将类转变为建造者模式

8.@Log:
作用于类上,生成日志变量。针对不同的日志实现产品,有不同的注解:

其他重要注解:
9.@Cleanup:
自动关闭资源,针对实现了java.io.Closeable接口的对象有效,如:典型的IO流对象

编译后的结果:

10.@SneakyThrows:
可以对受检异常进行捕捉并抛出,可以改写上述的main方法如下:

11.@Synchronized:
作用于方法级别,可以替换synchronize关键字或lock锁,用处不大.

12.@Accessors
@Accessors 注解用来配置lombok如何产生和显示getters和setters的方法。
@Accessors有三个属性,分别是fluent,chain,prefix,@Accessors注解既可以注解在类上也可以注解在属性上

1.fluent
fluent为一个布尔值,如果为true生成的get/set方法则没有set/get前缀,默认为false
例如:

@Accessors(flunet = true)
public class MyClass {
@Getter
private int num;
}
生成的get方法为num(),而不是getNum()

2.chain
chain为一个布尔值,如果为true生成的set方法返回this,为false生成的set方法是void类型。默认为false,除非当fluent为true时,chain默认则为true

在entity或dto或vo类上设置@Accessors(chain = true)
可以在编写代码时对对象的set进行链式赋值操作:

3.prefix
prefix为一系列string类型,可以指定前缀,生成get/set方法时会去掉指定的前缀
例如:

@Accessors(prefix = “m”)
public class MyClass {
@Getter
private int mNum;
}
生成的get方法为getNum(),而不是getMNum()

参考:https://www.jianshu.com/p/2543c71a8e45

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值