一、Lombok概述
以前的Java项目中,充斥着太多不友好的代码:POJO的getter/setter/toString/构造方法;打印日志;I/O流的关闭操作等等,这些代码既没有技术含量,又影响着代码的美观,Lombok应运而生。
LomBok可以通过注解,帮助开发人员消除JAVA中尤其是POJO类中的冗长代码。
二、Lombok安装
如果IDEA版本在2020.3以上,不需要安装Lombok插件。如果IDEA版本在2020.3以下,需要安装Lombok插件,安装方法如下:
1、点击Flie->Setting->Plugins
2、搜索Lombok,安装
3、SpringBoot项目Lombok的引入方式为:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
或者在创建项目的时候选择lombok依赖。
三、Lombok注解
3.1 @Setter、@Getter
作用:为类中的属性提供setter/getter方法
位置:类上方或属性上方,在属性上方则为属性生成setter/getter方法,在类上方表示给该类下的所有属性生成setter/getter方法
属性:设置setter和getter访问权限
//给类下的所有属性添加Setter/Getter @Setter @Getter public class User { //给id属性添加Setter @Setter private Integer id; //给username的setter方法设置私有权限 @Setter(AccessLevel.PRIVATE) private String username; //取消password的Getter方法 @Getter(AccessLevel.NONE) private String password; private static int age; private final String address = null; }
注:
- static修饰的变量不生成getter和setter方法
- final修饰的变量只生成getter方法
在IDEA中,按住Alt+7
可以查看Lombok生成的代码.
3.2 @ToString
作用:生成toString方法,默认情况下它会按顺序打印类名称以及每个字段。
位置:类上方
@Setter @Getter //给User2设置一个toString方法,该方法不会显示password的值 @ToString(exclude = {"password"}) public class User2 { private Integer id; private String username; private String password; }
3.3 @EqualsAndHashCode
在Java中,调用equals()可以判断两个对象是否相等。如果类不重写该方法,则判断两个引用是否指向同一个对象。
作用:生成equals和hashCode、canEqual方法。用于比较两个类对象是否相同。
位置:类上方
属性:
- exclude: 比较时排除一些属性
- of: 比较时只使用一些属性
@Setter @Getter @ToString //@EqualsAndHashCode(exclude = {"password"}) 排除password,只使用id,username对比及计算hash @EqualsAndHashCode(of = {"username"}) //只使用username对比及计算hash public class User3 { private Integer id; private String username; private String password; }
3.4 @NonNull
作用:用于方法参数前,表示调用该方法时参数不能为null;用于属性上方,表示为该属性赋值时值不能为null。
位置:方法参数前或属性上方。
@Setter @Getter public class User4 { // 调用构造方法或setter给id赋值时,值不能为null @NonNull private Integer id; private String username; private String password; // 调用sleep方法时,time参数不能为null public void sleep(@NonNull Integer time){ System.out.println("睡觉"); } }
初始化的时候可以是空。但是赋值的时候不能是空。
3.5 构造方法相关注解
作用:生成无参构造方法
位置:类上方
@RequiredArgsConstructor
作用:生成包含final和@NonNull修饰的属性的构造方法
位置:类上方
@AllArgsConstructor
作用:生成全参的构造方法
位置:类上方
@Setter @Getter //@NoArgsConstructor // 给类提供无参构造方法 @RequiredArgsConstructor // 生成两个username和sex参数的构造方法 @AllArgsConstructor//提供全参构造方法 public class User5 { @NonNull private Integer id; private String username; private String password; private final String sex; }
3.6 @Data、@Builder
@Data
作用:相当于同时添加@Setter、@Getter、@ToString、@EqualsAndHashCode、 @RequiredArgsConstructor五个注解
位置:类上方
@Builder
作用:提供链式风格创建对象
位置:类上方
// 同时提供@Setter、@Getter、@ToString、@EqualsAndHashCode、@RequiredArgsConstructor @Data // 提供链式风格创建对象 @Builder public class User6 { @NonNull private Integer id; private String username; private String password; } // 测试 @Test public void testUser() { User6 user6 = User6.builder() .id(1) .username("itbaizhan") .password("itbaizhan") .build(); }
3.7 @Log
作用:在类中生成日志对象,在方法中可以直接使用
位置:类上方
@Data @Log4j2 public class User7 { private Integer id; private String username; private String password; public void sleep(){ log.info("调用睡觉方法"); System.out.println("睡觉"); } }
注:针对不同的日志实现产品,有不同的日志注解,使用
@Log
表示使用Java自带的日志功能,除了@Log
,还可以使用@Log4j
、@Log4j2
、@Slf4j
等注解,来使用不同的日志产品。
3.8 @Cleanup、 @SneakyThrows
@Cleanup
作用:自动关闭资源,如IO流对象。
位置:代码前方
@SneakyThrows
作用:对方法中异常进行捕捉并抛出
位置:方法上方
@SneakyThrows public void read() { @Cleanup FileInputStream fis = new FileInputStream(""); }