介绍
Lombok 是一种 Java? 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注解实现这一目的。
使用步骤
第一步:安装IDEA插件
打开IDEA ------>Settings------>Plugins------>Browse Repositories------>搜索lombok----->安装------>重启IDEA
第二步:在项目添加依赖
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.6</version><scope>provided</scope>
</dependency>
第三步:使用
注解介绍(官方文档:https://projectlombok.org/features/all)
@Data 注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
@Setter :注解在属性上;为属性提供 setting 方法
@Getter :注解在属性上;为属性提供 getting 方法
@Log :注解在类上;为类提供一个 属性名为log 的日志对象,有多种实现
@NoArgsConstructor :注解在类上;为类提供一个无参的构造方法
@AllArgsConstructor :注解在类上;为类提供一个全参的构造方法
@Cleanup : 可以关闭流
@Builder : 被注解的类加个构造者模式
@Synchronized : 加个同步锁
@SneakyThrows : 等同于try/catch 捕获异常
@NonNull : 如果给参数加个这个注解 参数为null会抛出空指针异常
@Value : 注解和@Data类似,区别在于它会把所有成员变量默认定义为private final修饰,并且不会生成set方法。
@toString:注解在类上;为类提供toString方法(可以添加排除和依赖);
注解详情
@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);
默认情况下,记录器的主题(或名称)将是使用注释进行@Log注释的类的类名称。这可以通过指定topic参数来定制。例如:@Slf4j (topic="Lombok log")。
@Getter、@Setter
这两个注解使用的类或者属性上,会自动给类生成set/get方法和一个无参的构造方法
也可以加在属性上,生成对应属性的set/get方法和一个无参的构造方法
@Data
加在类上的注解,提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
需要注意的是,假如是boolean类型的属性的时候,生成的get方法对应的方法名是is开头的而不是get
@NonNull
对标注的值进行非空检查,假如为空,抛出NullPointerException
该注解使用之后默认生成一个无参的构造方法
该注解也可以放在参数上面,假如传入的参数为null,也会抛出NullPointerException
@ToString
该注解使用在类上,该注解默认生成下面格式的toString方法
可以通过在@ToString注解后面加上(includeFieldNames =false)来去掉打印信息当中的字段信息
还可以在@ToString注解后面加上callSuper = true调用父类的toString方法。
假如不想打印某个字段的信息,可以加上在字段上面加上@ToString.Exclude注解,这样生成的toString方法就不会打印该字段的信息。
@AllArgsConstructor
使用该注解在类上,生成一个含有全部参数的构造方法,默认不生成无参构造
@NoArgsConstructor
使用该注解在类上,生成一个无参构造方法
@Value
使用在类上,生成get、有参构造、hashCode、toString、equals等方法。
@SneakyThrows
作用在方法上面,方法发生异常的时候可以抛出异常信息或者指定的异常信息
@Cleanup
可以注解在需要释放的资源上面,保证资源的释放
第四步:Lombok的实现原理
Lombok支持JSR 269 Pluggable Annotation Processing API,Javac从Java6开始支持“JSR 269 API”规范,只要程序实现了该API,就能在Javac运行的时候得到调用。
JSR 269用Annotation Processor在编译期间而不是运行期间处理Annotation, Annotation Processor相当于编译器的一个插件,所以称为插入式注解处理.如果Annotation Processor处理Annotation时(执行process方法)产生了新的Java代码,编译器会再调用一次Annotation Processor,如果第二次处理还有新代码产生,就会接着调用Annotation Processor,直到没有新代码产生为止.每执行一次process()方法被称为一个"round",这样整个Annotation processing过程可以看作是一个round的序列. JSR 269主要被设计成为针对Tools或者容器的API。