当前位置: 代码迷 >> 综合 >> Lombok 使用介绍
  详细解决方案

Lombok 使用介绍

热度:73   发布时间:2023-12-20 09:30:43.0

介绍

Lombok 是一种 Java? 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注解实现这一目的。                                

使用步骤

第一步:安装IDEA插件

打开IDEA ------>Settings------>Plugins------>Browse Repositories------>搜索lombok----->安装------>重启IDEA

                                 

第二步:在项目添加依赖

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.6</version><scope>provided</scope>
</dependency>

第三步:使用

注解介绍(官方文档:https://projectlombok.org/features/all)
@Data 注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
@Setter :注解在属性上;为属性提供 setting 方法
@Getter :注解在属性上;为属性提供 getting 方法
@Log :注解在类上;为类提供一个 属性名为log 的日志对象,有多种实现
@NoArgsConstructor :注解在类上;为类提供一个无参的构造方法
@AllArgsConstructor :注解在类上;为类提供一个全参的构造方法
@Cleanup : 可以关闭流
@Builder : 被注解的类加个构造者模式
@Synchronized : 加个同步锁
@SneakyThrows : 等同于try/catch 捕获异常
@NonNull : 如果给参数加个这个注解 参数为null会抛出空指针异常
@Value : 注解和@Data类似,区别在于它会把所有成员变量默认定义为private final修饰,并且不会生成set方法。
@toString:注解在类上;为类提供toString方法(可以添加排除和依赖);

注解详情

@Log

可以根据你项目引入的日志记录方式来选择不同的注解使用

@CommonsLog
private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
@JBossLog
private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);
@Log
private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
@Log4j
private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
@Log4j2
private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
@Slf4j
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
@XSlf4j
private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);

 

默认情况下,记录器的主题(或名称)将是使用注释进行@Log注释的类的类名称。这可以通过指定topic参数来定制。例如:@Slf4j (topic="Lombok log")。

 

 @Getter、@Setter

这两个注解使用的类或者属性上,会自动给类生成set/get方法和一个无参的构造方法

 也可以加在属性上,生成对应属性的set/get方法和一个无参的构造方法

@Data 

加在类上的注解,提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法

需要注意的是,假如是boolean类型的属性的时候,生成的get方法对应的方法名是is开头的而不是get

@NonNull

对标注的值进行非空检查,假如为空,抛出NullPointerException

该注解使用之后默认生成一个无参的构造方法

 该注解也可以放在参数上面,假如传入的参数为null,也会抛出NullPointerException

@ToString

该注解使用在类上,该注解默认生成下面格式的toString方法

可以通过在@ToString注解后面加上(includeFieldNames =false)来去掉打印信息当中的字段信息

还可以在@ToString注解后面加上callSuper = true调用父类的toString方法。

假如不想打印某个字段的信息,可以加上在字段上面加上@ToString.Exclude注解,这样生成的toString方法就不会打印该字段的信息。

 

@AllArgsConstructor

使用该注解在类上,生成一个含有全部参数的构造方法,默认不生成无参构造

 

@NoArgsConstructor

使用该注解在类上,生成一个无参构造方法

@Value

使用在类上,生成get、有参构造、hashCode、toString、equals等方法。

@SneakyThrows

作用在方法上面,方法发生异常的时候可以抛出异常信息或者指定的异常信息

@Cleanup

可以注解在需要释放的资源上面,保证资源的释放

 

第四步:Lombok的实现原理

Lombok支持JSR 269 Pluggable Annotation Processing API,Javac从Java6开始支持“JSR 269 API”规范,只要程序实现了该API,就能在Javac运行的时候得到调用。

JSR 269用Annotation Processor在编译期间而不是运行期间处理Annotation, Annotation Processor相当于编译器的一个插件,所以称为插入式注解处理.如果Annotation Processor处理Annotation时(执行process方法)产生了新的Java代码,编译器会再调用一次Annotation Processor,如果第二次处理还有新代码产生,就会接着调用Annotation Processor,直到没有新代码产生为止.每执行一次process()方法被称为一个"round",这样整个Annotation processing过程可以看作是一个round的序列. JSR 269主要被设计成为针对Tools或者容器的API。