我们知道在最开始学习java的时候我们在编写pojo类时候需要手写getter,setter toString.....等,刚开始我们觉得还可以接受,乐于去编写的而且 java开发工具idea 也提供了这些快捷键可以一键生成属性对应的getter,setter,toString 等方法,不过即使这样我们每次还需要手动通过快捷键去生成,也是很繁琐不友好,而且当你一个实体类有大量属性时候就会产生大量getter,setter方法代码可读性就不是很好,这也就是java有时候为什么回显得臃肿的原因了,但是有什么好的解决办法呢,这是我们今天要说的Lombok
简单介绍
点击这里进入lombok官网正如Lombok介绍的一样
Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java. Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.
Project Lombok 是一个 Java 库,可自动插入您的编辑器并构建工具,为您的 Java 增添趣味。 永远不要再编写另一个 getter 或 equals 方法,通过一个注释,您的类就有一个功能齐全的构建器,自动化您的日志变量等等。
简而言之: Lombok可以通过注解形式来简化Java模版化代码也就是那些没有营养,却又不得不写的代码;像实体中定义的getter、setter、equals、hashcode、toString等方法).日志记录中引入日志记录器等,是提高Java开发人员,开发效率的语法糖!!!😄,用上这个后java开发也可以甜甜的,
如何使用Lombok
在项目中我们要添加Lombok依赖这里用maven为例
1<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> 2<dependency> 3 <groupId>org.projectlombok</groupId> 4 <artifactId>lombok</artifactId> 5 <version>1.18.20</version> 6 <scope>provided</scope> 7</dependency> 8
在IDEA开发工具中使用需要在idea开发工具中安装lombok插件
- 打开idea偏好设置找到插件一栏搜索lombok插件
没安装话点击安装我这里已经安装了,所以提示我需要更新
-
安装好后点解应用---重启idea 后才会生效

-
开启Enable annotation processing

这样到此就可以愉快的在项目中使用了
常用注解
实体类pojo
@Getter/@Setter
注解在属性上或者类上可以同时使用,当注解在属性上时为实体类单个属性提供 getXxx 和 setXxx 方法当注解在类上时为整个类所有属性提供getXxx 和 setXxx 方法getXxx 和 setXxx 方法用于给属性获取值和设置值
@ToString
注解在类上实现toString()方法用于在打印对象时候会答应对象内容,而不是对象的地址如

@EqualsAndHashCode
注解在类上 实现equals()方法和hashCode()方法用于对象直接比较
@Data
注解在类上提供类所有属性的 getXxx 和 setXxx 方法,此外还提供了equals、canEqual、hashCode、toString 方法
@NoArgsConstructor
注解在类上为类提供一个无参的构造方法
当类中有 final 字段没有被初始化时,编译器会报错,此时可用 @NoArgsConstructor(force = true),然后就会为没有初始化的 final 字段设置默认值 0 / false / null。
对于具有约束的字段(例如 @NonNull 字段),不会生成检查或分配,因此请注意,正确初始化这些字段之前,这些约束无效。
@AllArgsConstructor
注解在类上为类提供一个全参的构造方法
默认生成的方法是 public 的,如果要修改方法修饰符可以设置 AccessLevel 的值。如@AllArgsConstructor(access = AccessLevel.PROTECTED)
@RequiredArgsConstructor
注解在类上,会生成构造方法(可能带参数也可能不带参数)
如果带参数,这参数只能是以 final 修饰的未经初始化的字段或者是以 @NonNull 注解的未经初始化的字段。
该注解还可以用 @RequiredArgsConstructor(staticName="methodName") 的形式生成一个指定名称的静态方法,返回一个调用相应的构造方法产生的对象
@Builder
注解在类上实现一种Builder Patterns(生成器模式)的功能也就类似于函数链式赋值调用如

其他bean
@Slf4j/@Log4j2
注解在类上为类提供一个 属性名为log的日志对象用户为该类提高日志记录
@Synchronized
注解到方法上实现同步代码片段的功能也就是此方法同步执行
@SneakyThrows
注解到方法上可以实现在try...catch到异常后进行的throw操作
模版代码示例
pojo类
1package cn.soboys.springbootmybatisplus.bean; 2 3import lombok.*; 4 5import java.io.Serializable; 6 7/** 8 * @author kenx 9 * @version 1.0 10 * @date 2021/6/29 10:03 11 */ 12 13@Getter 14@Setter 15@AllArgsConstructor 16@NoArgsConstructor 17@EqualsAndHashCode 18@ToString 19@Builder 20public class User implements Serializable { 21 private static final long serialVersionUID = 6308315887056661996L; 22 private String username; 23 private int age; 24 private String phone; 25 private String addr; 26} 27
测试
1 @Test 2 public void t() { 3 4 //// 通用模式构建对象 5 User u1 = new User(); 6 u1.setUsername("keawe"); 7 8 // Builder模式构建对象 9 User u = User.builder().build(); 10 u.setUsername("kenx"); 11 12 User user = User.builder() 13 .age(18).username("kennx").phone("12313241").addr("232").build(); 14 15 // 全参构造 16 // 需要注意的是Lombok提供的全参构造是依赖属性在对象中定义顺序的, 17 User u2 = new User("judy", 12, "120198341", "wewe"); 18 User u3 = new User("judy", 12, "120198341", "wewe"); 19 20 // toString使用 21 System.out.println("toString" + user); 22 System.out.println("toString"+u2); 23 24 // equals()使用 25 System.out.println("equals" + u.equals(user)); 26 //对象属性完全一样就是true 27 System.out.println("equals" + u2.equals(u3)); 28 }
测试结果正常

上面注解可以简化成如下
1@AllArgsConstructor 2@NoArgsConstructor 3@Builder 4@Data 5public class User implements Serializable { 6 private static final long serialVersionUID = 6308315887056661996L; 7 private String username; 8 private int age; 9 private String phone; 10 private String addr; 11} 12
因为@Data注解就包含geXxx,SetXX,toString,equals、canEqual、hashCode方法不需要我们在单独写其注解
普通类
1package cn.soboys.springbootmybatisplus; 2 3import cn.soboys.springbootmybatisplus.bean.User; 4import lombok.SneakyThrows; 5import lombok.Synchronized; 6import lombok.extern.log4j.Log4j2; 7import lombok.extern.slf4j.Slf4j; 8import org.junit.jupiter.api.Test; 9 10 11/** 12 * @author kenx 13 * @version 1.0 14 * @date 2021/6/29 10:02 15 */ 16@Slf4j 17public class LombokTest { 18 19 @Test 20 @Synchronized 21 @SneakyThrows 22 public void a() { 23 log.info("1421121"); 24 throw new Exception("wew"); 25 } 26}
关注公众号猿人生获取更多干货分享

