当前位置:网站首页>Installation and use of Lombok plugin in IDEA
Installation and use of Lombok plugin in IDEA
2022-08-09 18:33:00 【Java enthusiasts wandering above the mountains】
我们在开发过程中,通常都会定义大量的JavaBean,然后通过IDE去生成其属性的构造器、getter、setter、equals、hashcode、toString方法,当要对某个属性进行改变时,比如命名、类型等,都需要重新去生成上面提到的这些方法,那Java中有没有一种方式能够避免这种重复的劳动呢?答案是有,我们来看一下下面这张图,右面是一个简单的JavaBean,只定义了两个属性,在类上加上了@Data
,从左面的结构图上可以看到,已经自动生成了上面提到的方法.
package cn.qiucode.util.page;
import lombok.Data;
import java.io.Serializable;
/**
* Paging parameter entity class
* @author 上官江北
* @date 2019/6/23 14:51
*/
@Data
public class Page implements Serializable {
private static final long serialVersionUID = 1L;
private int page = 1;// 当前页索引
private int pageSize = 20;// 每页显示的数据条数
private int total = 0;// 总条数
private int totalPage = 1;// 总页数
}
Lombok简介
Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法.官方地址:https://projectlombok.org/,github地址:https://github.com/rzwitserloot/lombok.
Lombok使用
IDEA中添加Lombok插件, File -> Setting -> Plugins 搜索Lombok Plugin, 点击install,安装完成后重启IDEA
在Maven项目的pom.xml中添加配置
注解介绍
下面只是介绍了几个常用的注解,更多的请参见https://projectlombok.org/features/index.html.
@Getter / @Setter
可以作用在类上和属性上,放在类上,会对所有的非静态(non-static)属性生成Getter/Setter方法,放在属性上,会对该属性生成Getter/Setter方法.并可以指定Getter/Setter方法的访问级别.
@EqualsAndHashCode
默认情况下,会使用所有非瞬态(non-transient)和非静态(non-static)字段来生成equals和hascode方法,也可以指定具体使用哪些属性.
@ToString
生成toString方法,默认情况下,会输出类名、所有属性,属性会按照顺序输出,以逗号分割.
@NoArgsConstructor,@RequiredArgsConstructor ,@AllArgsConstructor
无参构造器、部分参数构造器、全参构造器,当我们需要重载多个构造器的时候,Lombok就无能为力了.
@Data
@ToString, @EqualsAndHashCode, 所有属性的@Getter, 所有non-final属性的@Setter和@RequiredArgsConstructor的组合,通常情况下,我们使用这个注解就足够了.
Lombok原理
了解了简单的使用之后,现在应该比较好奇它是如何实现的.整个使用的过程中,只需要使用注解而已,不需要做其它额外的工作,那玄妙之处应该是在注解的解析上.JDK5引入了注解的同时,也提供了两种解析方式.
运行时解析
运行时能够解析的注解,必须将@Retention设置为RUNTIME,这样可以通过反射拿到该注解.java.lang.reflect反射包中提供了一个接口AnnotatedElement,该接口定义了获取注解信息的几个方法,Class、Constructor、Field、Method、Package等都实现了该接口,大部分开发者应该都很熟悉这种解析方式.
boolean isAnnotationPresent(Class annotationClass);
T getAnnotation(Class annotationClass);
Annotation[] getAnnotations();
Annotation[] getDeclaredAnnotations();
Lombok问题
无法支持多种参数构造器的重载
边栏推荐
猜你喜欢
一个程序员的水平能差到什么程度?
Reasons for slow startup of IDEA (1)
B49 - 基于STM32单片机的心率血氧检测与远程定位报警装置
IDEA启动缓慢原因(一)
uni-app中websocket的使用 断开重连、心跳机制
数据可视化的类别及其重要性
SQL trill interview: send you a universal template, to?(key, each user to log on to the maximum number of consecutive monthly)
易基因|作物育种:DNA甲基化在大豆优良品种培育中的作用研究成果
网络——局域网和广域网
网络——彻底搞懂数据时延的相关计算
随机推荐
网络——TCP拥塞控制
TMin - TMin是否产生溢出
OpenCV 图像变换之 —— 直方图均衡化
A48基于NRF24L01的无线心率血氧体温检测
uniapp 项目搭建
网络——ARP、DHCP、ICMP协议
【Web渗透】信息收集篇——Google搜索引擎(二)
Insert a number and sort "Suggested Favorites"
良匠-手把手教你写NFT抢购软(一)
resubmit 渐进式防重复提交框架简介
2022钉钉杯A题思路及代码:银行卡电信诈骗危险预测
七.getchar 和 scanf
QT工程编译过程学习
2022年中国第三方证券APP创新专题分析
AVL树的插入操作
A51 - 基于STM32的DHT11和LCD显示串口通信仿真
HR获取入职日期 RP_GET_HIRE_DATE
【完美解决v-if导致echart不显示问题】
2.1、基于并行上下文注意网络的场景文本图像超分辨率
网络——局域网和广域网