Lombok 介绍及使用
一,Lombok介绍
在 Java 开发中,常常需要编写大量的getter、setter方法、equals和hashCode方法、构造函数等重复且繁琐的代码。
为了减少 Java 代码中的冗余和样板代码,提高代码的可读性和开发效率,就有了Lombok的出现。
Lombok是一个 Java 库,它通过使用注解来简化 Java 代码的编写。它提供了一系列的注解,用于自动生成常见的代码,如getter
和setter
方法、构造函数、equals
和hashCode
方法等,以减少开发者的重复劳动。
使用Lombok,开发者只需在 Java 类上添加相应的注解,而不需要手动编写相应的代码。在编译过程中,Lombok会根据这些注解自动生成对应的代码,减少代码中的冗余和样板代码以及简化代码的编写过程。
使用Lombok可以提高代码的可读性、简洁性和可维护性,让开发者能够更专注于业务逻辑的实现。
二,Lombok下载
要想使用Lombok,需要在项目的构建工具中引入Lombok的依赖,并在开发环境中安装对应的插件,以支持Lombok的注解和自动生成的代码的显示和编辑。
1,Lombok插件安装
按照图中标记依次操作就可以进行Lombok插件的安装,安装好后点击启动,重新打开IDEA即可。
2,Lombok依赖引入
Lombok插件安装好后,就可以在项目的pom.xml
文件中添加Lombok依赖,Lombok依赖信息如下:
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
完成Lombok插件安装和Lombok依赖引入操作后,就可以使用Lombok了。
三,Lombok原理
Lombok基本实现原理
Lombok的基本实现原理可以概括为以下几个步骤:
- 注解扫描:Lombok的注解处理器会扫描Java源代码中的注解,并找到使用了Lombok注解的类、字段和方法。
- AST操作:Lombok注解处理器会对注解所标注的类进行抽象语法树(AST)的解析和操作,以识别和处理这些注解。
- 注解解析:注解处理器解析找到的注解,确定需要生成的代码类型和内容。
- 代码生成:基于注解的定义和规则,Lombok注解处理器生成相应的代码片段,如getter和setter方法、构造函数等。
- 代码注入:生成的代码片段被插入到编译结果中的相应位置,与手动编写的代码合并在一起。
- 最终编译:编译器将生成的代码和手动编写的代码一起编译为最终的字节码文件。
总结归纳: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文件对比图:
结语
这就是本期博客的全部内容啦!如果有什么其他的问题无法自己解决,可以在评论区留言哦!
最后,如果你觉得这篇文章写的还不错的话或者有所收获的话,麻烦小伙伴们动动你们的小手,给个三连呗(点赞👍,评论✍,收藏📖),多多支持一下!各位的支持是我最大的动力,后期不断更新优质的内容来帮助大家,一起进步。那我们下期见!