lombok

lombok

lombok是一个简化java代码编写的工具类,可以简化javabean的编写,可以通过注解的方式消除代码中的构造方法,getter/setter等代码,简化类的编写。

Lombok原理分析

Lombok核心在于对注解的解析上。JDK5引入了注解的同时,也提供了两种解析方式。

运行时解析

编译时解析

常见注解

@Data

生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。

@NonNull

用在成员方法或者构造方法的参数前面,会自动产生一个关于此参数的非空检查,如果参数为空,则抛出一个空指针异常

public String getName(@NonNull Person p){

return p.getName();

}

相当于:

public String getName(@NonNull Person p){

if(p==null){

throw new NullPointerException("person");

}

return p.getName();

}

@Getter/@Setter

用在成员变量前面,相当于为成员变量生成对应的get和set方法,同时还可以为生成的方法指定访问修饰符,当然,默认为public

@Log

用于生成log常量。具体注解根据日志工具的不同而不同,同时,可以在注解中使用topic来指定生成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);

@Cleanup

用在变量前面,可以保证此变量代表的资源会被自动关闭,默认是调用资源的close()方法,如果该资源有其它关闭方法

@NoArgsConstructor /@AllArgsConstructor

为该类产生无参的构造方法和包含所有参数的构造方法

@RequiredArgsConstructor

使用类中所有带有@NonNull注解的或者带有final修饰的成员变量生成对应的构造方法

@EqualsAndHashCode(callSuper = false)

用于在类的编译时自动生成equals()和hashCode()方法。这样可以节省手动编写这些方法的时间,并且可以确保生成的代码符合Java的约定。使用此注解可以使类更易于在哈希表中使用,并更容易在集合中比较。

callSuper默认为false,即默认不适用父类中属性判断

@ToString

添加toString方法。

默认情况下,会输出类名、所有属性(会按照属性定义顺序),用逗号来分割,通过callSuper参数来指定是否引用父类,includeFieldNames参数设为true,就能明确的输出toString()属性。

@Bulider

使用建造者模式创建对象。

相关推荐
mldong5 小时前
一个 App,十三套后端:手机审批端 uni-jeeflow-app 开源了
java·架构
tqs_123456 小时前
MySQL RR隔离级别死锁|Gap间隙锁、临键锁,订单并发范围查询死锁根因方案
java
逆境不可逃6 小时前
Pi Agent 学习笔记:多个工具怎样并行执行
java
Flynt7 小时前
Java 27 升级实测:默认值动得比新特性多,有个老参数会让 JVM 直接起不来
java·jvm·后端
Bs_MoneyMagnet7 小时前
基于springboot+vue的个人健康管理系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·vue3·springboot3·计算机毕业设计
星云API技术支持7 小时前
企业微信二次开发:群权限设置、成员管理与群资料维护的接口组合实践
java·前端·企业微信
niucloud-admin7 小时前
JAVA V6 多商户商城 开发文档——job 计划任务开发
java·python·github
海宇AI8 小时前
零信任架构实战:基于海宇柠檬查出险-登记证构建自动化车抵贷核保网关
java·人工智能·架构·自动化
cfm_291410 小时前
单例模式详解
java
我叫张土豆10 小时前
本体论、DDD、SDD、TDD:AI 编程时代的四层认知栈
java·人工智能