【工具篇】Lombok 介绍及使用(详细教程)

Lombok 介绍及使用


一,Lombok介绍

在 Java 开发中,常常需要编写大量的getter、setter方法、equals和hashCode方法、构造函数等重复且繁琐的代码。

为了减少 Java 代码中的冗余和样板代码,提高代码的可读性和开发效率,就有了Lombok的出现。

Lombok是一个 Java 库,它通过使用注解来简化 Java 代码的编写。它提供了一系列的注解,用于自动生成常见的代码,如gettersetter方法、构造函数、equalshashCode方法等,以减少开发者的重复劳动。

使用Lombok,开发者只需在 Java 类上添加相应的注解,而不需要手动编写相应的代码。在编译过程中,Lombok会根据这些注解自动生成对应的代码,减少代码中的冗余和样板代码以及简化代码的编写过程。

使用Lombok可以提高代码的可读性、简洁性和可维护性,让开发者能够更专注于业务逻辑的实现。


二,Lombok下载

要想使用Lombok,需要在项目的构建工具中引入Lombok的依赖,并在开发环境中安装对应的插件,以支持Lombok的注解和自动生成的代码的显示和编辑。

1,Lombok插件安装

按照图中标记依次操作就可以进行Lombok插件的安装,安装好后点击启动,重新打开IDEA即可。

2,Lombok依赖引入

Lombok插件安装好后,就可以在项目的pom.xml文件中添加Lombok依赖,Lombok依赖信息如下:

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

完成Lombok插件安装和Lombok依赖引入操作后,就可以使用Lombok了。


三,Lombok原理

Lombok基本实现原理

Lombok的基本实现原理可以概括为以下几个步骤:

  1. 注解扫描:Lombok的注解处理器会扫描Java源代码中的注解,并找到使用了Lombok注解的类、字段和方法。
  2. AST操作:Lombok注解处理器会对注解所标注的类进行抽象语法树(AST)的解析和操作,以识别和处理这些注解。
  3. 注解解析:注解处理器解析找到的注解,确定需要生成的代码类型和内容。
  4. 代码生成:基于注解的定义和规则,Lombok注解处理器生成相应的代码片段,如getter和setter方法、构造函数等。
  5. 代码注入:生成的代码片段被插入到编译结果中的相应位置,与手动编写的代码合并在一起。
  6. 最终编译:编译器将生成的代码和手动编写的代码一起编译为最终的字节码文件。

总结归纳:Lombok利用 Java 编译器的注解处理器技术,在编译期间扫描和解析使用了Lombok注解的源代码,然后会对注解所标注的类进行抽象语法树(AST)的解析和操作,以识别和处理这些注解。然后再根据注解的定义和规则,生成相应的代码片段,并将其插入到编译器的内部结构中。最后,生成的代码片段与手动编写的代码一起经过编译,生成可执行的字节码文件。


普通程序运行原理流程:

Lombok运行原理流程:


四,Lombok使用

常见的Lombok基本注解

注解 注解作用
@Getter 自动生成字段的getter方法
@Setter 自动生成字段的setter方法
@ToString 自动生成toString方法
@EqualsAndHashCode 自动生成equals和hashCode方法
@NoArgsConstructor 自动生成无参构造函数
@AllArgsConstructor 自动生成包含所有字段的构造函数

常见的Lombok组合注解

注解 注解作用
@Data 组合了@Getter、@Setter、@ToString、@EqualsAndHashCode等注解的功能
@Value 组合了@Getter、@ToString、@EqualsAndHashCode等注解的功能

思考:@Data注解和@Value注解有哪些区别?

解答:@Data生成的类是可变的,具有可读写的setter方法,@Value生成的类是不可变的,字段是final的,没有生成setter方法。

Lombok日志注解

注解 注解作用
@Slf4j 自动生成一个名为log的日志记录器

Lombok其他注解

注解 注解作用
@Builder 自动生成Builder模式的构造器方法
@NonNull 自动生成非空检查
@Delegate 自动生成委托方法
@Cleanup 自动释放资源

日志注解的使用

在上篇博客讲解日志打印的方式时,不难发现每次都使用LoggerFactoy.getLogger(lxxx.class)方法获取到 log对象的过程比较繁琐,而且要确保每个类对应的包都导入成功,那有什么方法来解决这个问题吗?

答案肯定是有的,使用Lombok中的日志注解@SIf4j就可以很好地解决上述操作过程的繁琐问题。

在添加 lombok 框架依赖后,使用 @Slf4j 注解就可在程序中使用log对象输入日志内容,并且只能使用 log 对象才能输出。

那为啥只能使用 log 对象才能输出呢? 这是因为log对象是lombok提供的对象。

使用Lombok的日志注解,并经过Lombok的一系列处理操作后,@Slf4J 注解会自动转换成对应的log对象创建代码。

与之对应的.java文件和编译生成的.class文件对比图:


结语

这就是本期博客的全部内容啦!如果有什么其他的问题无法自己解决,可以在评论区留言哦!

最后,如果你觉得这篇文章写的还不错的话或者有所收获的话,麻烦小伙伴们动动你们的小手,给个三连呗(点赞👍,评论✍,收藏📖),多多支持一下!各位的支持是我最大的动力,后期不断更新优质的内容来帮助大家,一起进步。那我们下期见!


相关推荐
咩咩啃树皮7 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
鱟鲥鳚8 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
大模型码小白9 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司10 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地11 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
wuqingshun31415911 小时前
TCP超时重传机制是为了解决什么问题?
java
莫逸风13 小时前
【AgentScope 2.0】 0. 学习指南
java·llm·agent·agentscope
隔窗听雨眠13 小时前
Spring Boot在云原生时代的编程范式革新研究
spring boot·后端·云原生
z1234567898614 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
yaoxin52112314 小时前
470. Java 反射 - Member 接口与 AccessFlag
java·开发语言·python