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

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

相关推荐
daidaidaiyu10 小时前
ThingsBoard 集群的核心逻辑源码分析
java
我可能是个假开发10 小时前
FTP Unicode 文件名导致 `550` 的问题分析与解决方案
java·开发语言·spring
caoerzhong11 小时前
中小企业上 WMS 该先上哪几块:JeeWMS 开源 Java 仓库管理系统的分批上线清单
java·python·开源
【JAVA】玩家12 小时前
Spring核心原理全解析:从零到生产实战
java·后端·spring
Wang's Blog12 小时前
Java框架 SpringCloud 快速入门: 实现 Feign 最佳实践(抽取方式)
java·spring cloud
MandalaO_O13 小时前
IDEA 开发(快捷键 + 调试 + 序列化)
java·ide·intellij-idea
xiaoqiMikko14 小时前
JVM 线上排查实战(七):jps 看不见它、jstack 连不上它,可它明明活得好好的
java·jvm
狼爷14 小时前
Rust/Go/Java/Python/PHP 大比拼:负载下后端框架到底差多少?
java·后端·编程语言
念何架构之路15 小时前
zap扩展生态与总结
java·前端·数据库
第七页独白15 小时前
汽车零件厂如何通过 QMS 真正落地 IATF 16949——QMS软件系统:品质检验-内审稽核-8d客诉管理:全星质量管理软件系统
java·前端·数据库