SpringBoot(番外):使用lombok简化实体

为什么使用lombok

因为懒啊,使用lombok可以能少写一点代码,例如实体类的getter、setter方法(而且狂加注解真的很爽/滑稽)

但需要注意的是,由于省略了许多代码,采用了注解代替,可能会使阅读性降低。(有些人会这么说,但个人觉的能在小组内部做好技术统一其实不是什么问题,因为省略的代码大部分都是一些getter,setter,toString之类的…)

另外使用lombok需要在IDEA中安装一个插件,如果没有这个插件可能会出现很多报红,当一个没有使用过lombok的同行来看你写的代码可能会感觉有些疑惑。

##如何使用lombok

####在IDEA中安装lombok插件

打开IDEA的Setting –> 选择Plugins选项 –> 选择Browse repositories –> 搜索lombok –> 点击安装 –> 安装完成重启IDEA –> 安装成功

添加依赖

在pom文件中添加依赖

1
2
3
4
5
6
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<scope>provided</scope>
</dependency>

使用注解

关于lombok提供的注解可以参考lombok帮助文档,此处对常用的注解做一些简单的描述

  • @Getter和@Setter:这个注解可以用在类上或属性上,可以创建出getter和setter方法,同时还会创建一个无参构造。

  • @NonNull:该注解使用在属性上,该注解用于属的非空检查,当放在setter方法的字段上,将生成一个空检查,如果为空,则抛出NullPointerException,该注解会默认生成一个无参构造。

  • @toString:该注解用在类上,会自动生成toString方法。

    • 如果需要可以通过注释参数includeFieldNames来控制输出中是否包含的属性名称。
    • 可以通过exclude参数中包含字段名称,可以从生成的方法中排除特定字段。
    • 可以通过callSuper参数输出父类字段,前提是父类也有toString方法,不然会打印出地址值。
  • @EqualsAndHashCode:这个注解可以用在类上,会生成equals方法和hashCode方法,当存在继承关系需要设置callSuper参数为true

  • NoArgsConstructor:这个注解可以用在类上,可以提供一个无参构造。

  • @AllArgsConstructor:这个注解可以用在类上,可以提供一个全参构造,默认不提供无参构造。

  • @Data:这个注解用在类上,会创建getter、setter、equals、canEqual、hashCode、toString方法 。

  • @Builder:可以开启建造者模式,创建对象的时候不再需要单独调用setter方法。

    • 将这个注解与@Data一起使用可以减少很多代码,但这样使用时需要注意一点,我们需要手动创建一个无参构造,并在上面加上@Tolerate注解,不然会报错。
  • Log:log的注解有很多选择,具体如下,可以根据不同的日志系统选择需要的注解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//@CommonsLog
private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
//@JBossLog
private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);
//@Log
private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
//@Log4j
private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
//@Log4j2
private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
//@Slf4j
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
//@XSlf4j
private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);