Lombok框架学习笔记,用于精简实体类代码,记录了Lombok的要点,方便查阅。
文章目录
什么是Lombok?
Lombok是一个岛的名字,通过简单的注解来精简代码达到消除冗长代码的目的。可以自动化生成get/set方法等。
官方网站:https://projectlombok.org
Lombok的优点
- 提高编码效率
- 使代码更简洁
- 消除冗长代码
- 避免修改字段名字时忘记修改方法名
- IDE上必须要支持Lombok,否则IDE会报错
Lombok原理
- 支持JSR 269规范
- javac从Java6开始支持“JSR 269 API”规范
- 只要程序实现了该API,就能在javac运行的时候得到调用
- Lambok在javac编译源码中执行的内容:
- Source File
- javac会对源码进行分析(Parse)
- 生成抽象语法树AST(处理流程如下)
- 调用Lombok Annotation Processor
- 然后Lombok对抽象语法树进行处理
- Lombok Annotation Handler(开始进行处理)
- 找到某个(例如@Data:提供类所有属性的 getting 和 setting 方法)注解对应的类的语法树
- 在语法树中增加getter和setter定义的相应树节点
- 然后修改语法树,返回(输出)Modified AST
- 对返回结果进行解析和生成,于是产生Byte Code(字节码文件)
实现Lombok的具体流程
Lombok使用流程简述
- 加载Lombok包
- 给IDE安装Lombok插件(防止报错)
- 去需要通过注解添加geter/setter的类,增加Lombok注解
- 完成(例如增加@Date注解后,无需再写get/set等方法,系统会在编译时自动创建对应方法)
项目中引入Lombok的Jar包
- Maven引入Lombok
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<!--表示打包时不包含这个包,该条可加可不加-->
<scope>provided</scope>
</dependency>
- 访问官网,使用其他方式引入
安装Lombok插件
安装插件后,使用注解时IDE才不会报错,不会提示找不到对应方法。
Eclipse安装Lombok插件
- 访问官网https://projectlombok.org,下载lombok.jar
- 双击运行lombok.jar启动安装程序
- 点击install/update
- linux/mac可能会出现权限问题,请使用管理员权限运行
- 提示“install successful”就表示安装成功,可以退出该界面
- 在eclipse中,点击Help菜单-About Eclipse IDE。可以查看到lombok版本号,这就表示安装成功。
IntelliJ IDEA安装Lombok插件
- Go to File > Settings > Plugins
- Click on Browse repositories…
- Search for Lombok Plugin
- Click on Install plugin
- Restart IntelliJ IDEA
案例
增加geter/seter方法,重写equals/hashcode方法,构建全参数和无参数构造器
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Cart {
private Integer id;
private Integer userId;
private Integer productId;
}
增加Set方法,重写equals和hashcode只包含id和userId比较,重写toString方法剔除updateTime属性
@Setter
@EqualsAndHashCode(of={"id","userId"})
@ToString(exclude="updateTime")
public class Cart {
private Integer id;
private Integer userId;
private Integer productId;
private Date updateTime;
}
使用注解调用logback加载log对象
@Slf4j
public class CategoryServiceImpl implements ICategoryService {
//注解等同于下面的内容(注解的对象为log)
//private Logger logger = LoggerFactory.getLogger(CategoryServiceImpl.class);
public ServerResponse<List<Category>> getCategory(int categoryId){
//只做演示log,业务代码去掉了
log.info("未找到parentId为"+categoryId+"的分类");
return ServerResponse.createBySuccess();
}
}
Lombok相关知识
注解介绍
注解 | 说明 |
---|---|
@Date | 注解在类上,提供类所有属性的 getting 和 setting 方法。(包含了getter/setter/tostring/equalsandhashcode注解,默认所有字段) |
@Getter | 注解在属性上,自动生成get方法 |
@Getter(AccessLevel.PROTECTED) | 生成protected权限的get方法 |
@Setter | 注解在属性上,自动生成set方法 |
@Setter(AccessLevel.PROTECTED) | 生成protected权限的set方法 |
@NoArgsConstructor | 注解在类上;为类提供一个无参的构造方法 |
@AllArgsConstructor | 注解在类上;为类提供一个全参的构造方法 |
@ToString | 把类声明的所有属性进行ToString |
@ToString(exclude=“column”) | 表示ToString里排除column属性 |
@EqualsAndHashCode | 表示重写Equals和hashcode方法 |
@EqualsAndHashCode(of=“column”) | 表示重写里只有column |
@Slf4j | 使用该注解后,可以直接使用log,而无需生成logger对象,是logback使用的 |
@Log4j | 当项目是log4j日志框架时使用 |
反编译工具
Lombok框架使用注解后,是在解析源码的过程中生成对应方法的,可以通过反编译CLASS文件,查看Lombok生成的内容。
- 工具:Java Decompiler
- 官网:http://jd.benow.ca/
- 三种类型:JD-GUI/JD-IDEA/JD-Eclipse