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

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

相关推荐
MY_TEUCK1 小时前
Sealos 平台部署实战指南:结合 Cursor 与版本发布流程
java·人工智能·学习·aigc
我爱cope2 小时前
【从0开始学设计模式-10| 装饰模式】
java·开发语言·设计模式
朝新_2 小时前
【Spring AI 】图像与语音模型实战
java·人工智能·spring
RH2312113 小时前
2026.4.16Linux 管道
java·linux·服务器
zmsofts3 小时前
java面试必问13:MyBatis 一级缓存、二级缓存:从原理到脏数据,一篇讲透
java·面试·mybatis
aq55356005 小时前
编程语言三巨头:汇编、C++与PHP大比拼
java·开发语言
我是无敌小恐龙5 小时前
Java SE 零基础入门Day01 超详细笔记(开发前言+环境搭建+基础语法)
java·开发语言·人工智能·opencv·spring·机器学习
心态与习惯6 小时前
Julia 初探,及与 C++,Java,Python 的比较
java·c++·python·julia·比较
一叶飘零_sweeeet6 小时前
优秀文章合集
java
zopple6 小时前
ThinkPHP5.x与3.x核心差异解析
java·python·php