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

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

相关推荐
云烟成雨TD4 分钟前
Spring AI Alibaba 1.x 系列【52】Interrupts 中断机制:案例演示
java·人工智能·spring
老鱼说AI10 分钟前
现代 LangChain 开发指南:从 LCEL 原理到企业级 RAG 与 Agent 实战
java·开发语言·人工智能·深度学习·神经网络·算法·机器学习
云烟成雨TD38 分钟前
Spring AI Alibaba 1.x 系列【51】Graph 整体运行全流程
java·人工智能·spring
霑潇雨1 小时前
Spark学习基础转换算子案例(单词计数(WordCount))
java·大数据·分布式·学习·spark·maven
夏日听雨眠1 小时前
Linux(信号,管道,共享内存)
java·服务器·网络
TANGLONG2221 小时前
【C++】继承详解——基类/派生类、作用域、默认函数、菱形继承(超详细)
java·c语言·c++·经验分享·笔记·ajax
zmsofts1 小时前
IntelliJ IDEA)因为内存不足而崩溃
java·ide·intellij-idea
Dlrb12111 小时前
C语言-字符串指针与函数指针
java·c语言·前端
萝卜白菜。1 小时前
通过cmdline-jmxclient.jar采集TongWeb8.0监控值
java·jar
最后一支迷迭香1 小时前
苹果的MacOS系统适合做Java开发吗
java·开发语言·macos