Lombok框架

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使用流程简述
  1. 加载Lombok包
  2. 给IDE安装Lombok插件(防止报错)
  3. 去需要通过注解添加geter/setter的类,增加Lombok注解
  4. 完成(例如增加@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插件

  1. 访问官网https://projectlombok.org,下载lombok.jar
  2. 双击运行lombok.jar启动安装程序
  3. 点击install/update
  4. linux/mac可能会出现权限问题,请使用管理员权限运行
  5. 提示“install successful”就表示安装成功,可以退出该界面
  6. 在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生成的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值