一、Lombok Introduce
Lombok提供了常用的注解,注解可以放在类上或者属性上,可以在源代码的编译时期自动生成一些代码,达到增强类的功能的作用
二、Lombok Working Principle
编译时解析与运行时解析
运行时解析,如Spring AOP通过反射获取目标类,但也只有在程序运行时才可以获取到,导致运行时效率低,而且无法在编译阶段获取增强的目标类
编译时解析就是指Lombok这种工作方式,在编译代码时实现增强类的目的
把注解与Java编译器结合使用的两种方式
编译时解析的两种机制
- Annotation Processing Tool(注解处理器)
- Pluggabke Annotation Processing API(JSR269插入式注解处理器)
三、Lombok Plugin Install
Lombok 插件在 IntelliJ IDEA上安装步骤 projectlombok.org/setup/intel…
- Go to
File > Settings > Plugins
- Click on
Browse repositories...
- Search for
Lombok Plugin
- Click on
Install plugin
- Restart IntelliJ IDEA
四、How to Use Lombok
Lombok常用注解
新建Maven项目
新建一个maven项目,选择
pom.xml中引入lombok依赖
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.18</version> <scope>provided</scope> </dependency> 复制代码
@Getter、@Setter注解
使用Lombok的注解,并查看编译后的class文件,理解Lombok的工作原理
增加entity包,新增Sku实体类,在skuId属性上增加@Getter注解
public class Sku { @Getter private Integer skuId; private String skuName; @Setter private Double skuPrice; private Integer totalNum; private Double totalPrice; private Enum skuCategory; } 复制代码
类上点击鼠标右键,点击“Recompile 'Sku.java'”
target目录下查看编译后的源代码,自动增加了skuId属性的getter方法,skuPrice的setter方法
@Getter、@Setter直接支持设置访问级别,以及在方法上或者属性上增加注解,在skuName属性上和totalNum属性上增加注解 @Getter(value = AccessLevel.PROTECTED, onMethod_ = {@NotNull})、 @Setter(value = AccessLevel.PRIVATE, onParam_ = {@NotNull}) 再次编译Sku,查看编译后的class文件
@Getter放在final属性上,可以支持懒加载,给Sku实体类增加stock属性,并定义为final Integer 类型,并增加@Getter(lazy = true)
@Getter(lazy = true) private final Integer stock = 1000; 复制代码
再次编译Sku类,查看编译后的class文件
从编译文件可以看出stock属性一开始并没有被赋值,而是在调用的时候才会被赋值,实现类懒加载
@ToString注解
在Sku类上增加@ToString注解,编译Sku类,查看编译后的class文件