我们知道在最开始学习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为例
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
在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
类
package cn.soboys.springbootmybatisplus.bean;
import lombok.*;
import java.io.Serializable;
/**
* @author kenx
* @version 1.0
* @date 2021/6/29 10:03
*/
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
@ToString
@Builder
public class User implements Serializable {
private static final long serialVersionUID = 6308315887056661996L;
private String username;
private int age;
private String phone;
private String addr;
}
测试
@Test
public void t() {
//// 通用模式构建对象
User u1 = new User();
u1.setUsername("keawe");
// Builder模式构建对象
User u = User.builder().build();
u.setUsername("kenx");
User user = User.builder()
.age(18).username("kennx").phone("12313241").addr("232").build();
// 全参构造
// 需要注意的是Lombok提供的全参构造是依赖属性在对象中定义顺序的,
User u2 = new User("judy", 12, "120198341", "wewe");
User u3 = new User("judy", 12, "120198341", "wewe");
// toString使用
System.out.println("toString" + user);
System.out.println("toString"+u2);
// equals()使用
System.out.println("equals" + u.equals(user));
//对象属性完全一样就是true
System.out.println("equals" + u2.equals(u3));
}
测试结果正常
上面注解可以简化成如下
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
public class User implements Serializable {
private static final long serialVersionUID = 6308315887056661996L;
private String username;
private int age;
private String phone;
private String addr;
}
因为@Data
注解就包含geXxx,SetXX,toString,equals、canEqual、hashCode方法不需要我们在单独写其注解
普通类
package cn.soboys.springbootmybatisplus;
import cn.soboys.springbootmybatisplus.bean.User;
import lombok.SneakyThrows;
import lombok.Synchronized;
import lombok.extern.log4j.Log4j2;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
/**
* @author kenx
* @version 1.0
* @date 2021/6/29 10:02
*/
@Slf4j
public class LombokTest {
@Test
@Synchronized
@SneakyThrows
public void a() {
log.info("1421121");
throw new Exception("wew");
}
}
关注公众号猿人生获取更多干货分享