Java编码辅助工具Lombok用法详解

 更新时间:2019年06月25日 09:53:39   作者:空山新雨  
这篇文章主要介绍了Java编码辅助工具Lombok用法详解,可以使用Lombok来避免这种重复的操作,减少非核心代码的臃肿,提高编码效率,需要的朋友可以参考下

前言

在项目开发过程中,经常会涉及到一些调整很少但又必不可少的环节,比如实体类的Getter/Setter方法,ToString方法等。这时可以使用Lombok来避免这种重复的操作,减少非核心代码的臃肿,提高编码效率。

如何在IntelliJ IDEA中引入Lombok

安装Lombok 插件(否则在调用setter/getter方法时IDE会提示报错): File -> Settings -> Plugins 搜索Lombok Plugin完成安装。

pom.xml中引入lombok依赖(其中<scope>provided</scope>表示只在编译、测试阶段依赖该jar,运行阶段不依赖(如运行容器中已包含了该jar,则置为provided避免jar冲突),默认<scope>compile</scope>则表示在编译、测试、运行阶段都依赖):

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

Lombok注解用途

@Getter/@Setter

为字段生成Getter和Setter方法,可以注解到字段或者类上(注解在类上会为类中所有字段生成Getter和Setter方法)。默认是public类型的,如果需要的话可以修改方法的访问级别: @Getter(AccessLevel.PROTECTED)

Lombok中的注解一般都会包含一个无参构造函数注解@NoArgsConstructor(用于生成无参构造函数) ,所以还会额外生成一个无参构造函数

@NonNull

调用字段的setter方法时,如果传的参数为null,则会抛出空异常NullPointerException,生成setter方法时会检查参数是否为空

@NoArgsConstructor

生成一个无参构造方法。当类中有final字段没有被初始化时,编译器会报错,此时可用@NoArgsConstructor(force = true),然后就会为没有初始化的final字段设置默认值 0 / false / null, 这样编译器就不会报错。对于具有约束的字段(例如@NonNull字段),不会生成检查或分配,因此请注意,正确初始化这些字段之前,这些约束无效。

@RequiredArgsConstructor

生成构造方法(可能带参数也可能不带参数),如果带参数,这参数只能是以final修饰的未经初始化的字段,或者是以@NonNull注解的未经初始化的字段。

@RequiredArgsConstructor(staticName = “of”)会生成一个of()的静态方法,并把构造方法设置为私有的

@AllArgsConstructor

生成一个全参数的构造方法

@ToString

生成toString()方法,默认情况下它会按顺序(以逗号分隔)打印你的类名称以及每个字段。可以这样设置不包含哪些字段,可以指定一个也可以指定多个@ToString(exclude = “id”) / @ToString(exclude = {“id”,”name”}) 。如果继承的有父类的话,可以设置callSuper 让其调用父类的toString()方法,例如:@ToString(callSuper = true)

@EqualsAndHashCode

生成hashCode()和equals()方法,默认情况下,它将使用所有非静态,非transient字段。但可以通过在可选的exclude参数中来排除更多字段。或者,通过在of参数中命名它们来准确指定希望使用哪些字段。

// exclude 排除字段 
@EqualsAndHashCode(exclude = {“password”, “salt”})
// of 指定要包含的字段 
@EqualsAndHashCode(of = {“id”, “phone”, “password”})

@Data

@Data 包含了 @ToString、@EqualsAndHashCode、@Getter / @Setter和@RequiredArgsConstructor的功能

@Value

@Value 将字段都变成不可变类型:使用final修饰, 同时还包含@ToString、@EqualsAndHashCode、

@AllArgsConstructor 、@Getter(注意只有Getter没有Setter)

@Log

生成log对象,用于记录日志,可以通过topic属性来设置getLogger(String name)方法的参数 例如 @Log4j(topic = “com.xxx.service.xxx”),默认是类的全限定名,即 类名.class,log支持以下几种:

  • @Log java.util.logging.Logger
  • @Log4j org.apache.log4j.Logger
  • @Log4j2 org.apache.logging.log4j.Logger
  • @Slf4j org.slf4j.Logger
  • @XSlf4j org.slf4j.ext.XLogger
  • @CommonsLog org.apache.commons.logging.Log
  • @JBossLog org.jboss.logging.Logger
@Log
private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
@Log4j
private static final Logger log = org.apache.log4j.Logger.Logger.getLogger(UserService.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);
@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);

@SneakyThrows

使用try catch 修饰方法,来捕获异常, 默认捕获的是Throwable异常,也可以设置要捕获的异常:@SneakyThrows(InterruptedException.class)

@Synchronized

给方法加上同步锁

@Cleanup

主要用来修饰 IO 流相关类, 会在 finally 代码块中对该资源进行 close();

@Getter(lazy = true)

标注字段为懒加载字段,懒加载字段在创建对象时不会进行初始化,而是在第一次访问的时候才会初始化,后面再次访问也不会重复初始化

@Wither

提供了给final字段赋值的一种方法

@Builder

为你的类生成复杂的构建器API。

@Delegate

为List类型的字段生成一大堆常用的方法,其实这些方法都是List中的方法 。注意:一个类中只能使用一个@Delegate注解,因为使用多个会生成多个size()方法,从而会编译报错。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • JavaWeb踩坑记录之项目访问不到html文件

    JavaWeb踩坑记录之项目访问不到html文件

    这篇文章主要给大家介绍了关于JavaWeb踩坑记录之项目访问不到html文件的相关资料,文中通过实例代码介绍的非常详细,对大家学习或者使用JavaWeb具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • VScode+Java配置与使用的详细步骤

    VScode+Java配置与使用的详细步骤

    这篇文章主要介绍了VS code+Java配置与使用的详细步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • Springboot RestTemplate设置超时时间的方法(Spring boot 版本)

    Springboot RestTemplate设置超时时间的方法(Spring boot 

    这篇文章主要介绍了Springboot RestTemplate设置超时时间的方法,包括Spring boot 版本<=1.3和Spring boot 版本>=1.4,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • 浅谈JAVA 责任链模式

    浅谈JAVA 责任链模式

    这篇文章主要介绍了JAVA 责任链模式的的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • Nacos注册中心的几种调用方式详解

    Nacos注册中心的几种调用方式详解

    Spring Cloud Alibaba Nacos 作为近几年最热门的注册中心和配置中心,也被国内无数公司所使用,本文就来看下 Nacos 作为注册中心时,调用它的接口有几种方式
    2023-10-10
  • Collections工具类_动力节点Java学院整理

    Collections工具类_动力节点Java学院整理

    Collections工具类提供了大量针对Collection/Map的操作。这篇文章主要介绍了Collections工具类_动力节点Java学院整理,需要的朋友可以参考下
    2017-04-04
  • maven无法依赖spring-cloud-stater-zipkin的解决方案

    maven无法依赖spring-cloud-stater-zipkin的解决方案

    这篇文章主要介绍了maven无法依赖spring-cloud-stater-zipkin如何解决,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • SpringMVC集成Swagger实例代码

    SpringMVC集成Swagger实例代码

    本篇文章主要介绍了SpringMVC集成Swagger实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • 聊聊springboot 整合 hbase的问题

    聊聊springboot 整合 hbase的问题

    这篇文章主要介绍了springboot 整合 hbase的问题,文中给大家提到配置linux服务器hosts及配置window hosts的相关知识,需要的朋友可以参考下
    2021-11-11
  • Spring Boot实战之逐行释义Hello World程序

    Spring Boot实战之逐行释义Hello World程序

    spring boot 是基于Spring的一个框架,Spring boot帮我们集成很多常用的功能,使得整个配置更加简单。这篇文章主要介绍了Spring Boot实战之逐行释义Hello World,需要的朋友可以参考下
    2017-12-12

最新评论