您好,欢迎访问一九零五行业门户网

SpringBoot整合Lombok及常见问题怎么解决

lombok使用注解可以让lombok简化java代码、提高开发效率。其本身是一个优秀的java代码库,它采用了一种投机取巧的语法糖,简化了java的编码,为java代码的精简提供了一种方式,但lombok并非一个标准的java库。
在web开发过程中经常需要写的java类,都需要花时间去添加相应的getter/setter、构造器和equals等方法。当属性多时会出现大量的getter/setter方法,这些显得很冗长也没有太多技术含量,一旦修改属性,容易出现忘记修改对应方法的情况。
官方网站:project lombok
1. lombok常用注解
注解作用
@data 注解在类上;提供类所有属性的 getting 和 setting 方法,还提供了equals、canequal、hashcode、tostring 方法
@setter 注解在属性上;为属性提供 setting 方法
@setter 注解在属性上;为属性提供 getting 方法
@log4j 注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
@noargsconstructor 注解在类上;为类提供一个无参的构造方法
@allargsconstructor 注解在类上;为类提供一个全参的构造方法
@cleanup : 关闭流
@builder 被注解的类增加构造者模式
@synchronized 同步锁
@sneakythrows 捕获异常,类似try/catch 捕获异常
@nonnull 给参数加个这个注解,当参数为null会抛出空指针异常
@value 注解和@data类似,默认定义所有成员变量为private final修饰,不生成set方法
2. lombok注解失效原因在pom.xml引入lombok依赖后,还需要安装lombok插件,重启idea才能生效。
整合过程1. 引入lombok依赖:复制如下代码并插入pom.xml当中,等待maven仓库自动下载安装依赖,没有设置自动导包点击手动导入。
<!--导入lombok小辣椒驱动依赖,用来生成get/set等方法依赖--> <dependency> <groupid>org.projectlombok</groupid> <artifactid>lombok</artifactid> <!--<optional>true</optional>--> <version>1.18.12</version> <scope>provided</scope><!--自动生成有参无参构造--> </dependency>
2. 安装lombok插件在idea中点击file-》setting-》plugins-》搜索lombok安装插件后,重启idea;
3. 利用lombok为属性生成getter/setter等方法程序代码示例
a.未使用lombok编写实体类(程序肥胖、不好看)
使用ide自带的快捷键能自动生成getter/setter这些方法:
package com.dvms.entity;/* *文件名: anglerecord *创建者: cjw *创建时间:2020/6/6 14:40 *描述: 记录 */public class record { private string time; private string device; private string state; public record(string time, string device, string state) { this.time = time; this.device = device; this.state = state; } public record() { } public string gettime() { return this.time; } public string getdevice() { return this.device; } public string getstate() { return this.state; } public record settime(string time) { this.time = time; return this; } public record setdevice(string device) { this.device = device; return this; } public record setstate(string state) { this.state = state; return this; } public boolean equals(final object o) { if (o == this) return true; if (!(o instanceof record)) return false; final record other = (record) o; if (!other.canequal((object) this)) return false; final object this$time = this.gettime(); final object other$time = other.gettime(); if (this$time == null ? other$time != null : !this$time.equals(other$time)) return false; final object this$device = this.getdevice(); final object other$device = other.getdevice(); if (this$device == null ? other$device != null : !this$device.equals(other$device)) return false; final object this$state = this.getstate(); final object other$state = other.getstate(); if (this$state == null ? other$state != null : !this$state.equals(other$state)) return false; return true; } protected boolean canequal(final object other) { return other instanceof record; } public int hashcode() { final int prime = 59; int result = 1; final object $time = this.gettime(); result = result * prime + ($time == null ? 43 : $time.hashcode()); final object $device = this.getdevice(); result = result * prime + ($device == null ? 43 : $device.hashcode()); final object $state = this.getstate(); result = result * prime + ($state == null ? 43 : $state.hashcode()); return result; } public string tostring() { return "record(time=" + this.gettime() + ", device=" + this.getdevice() + ", state=" + this.getstate() + ")"; }}
b.引入lombok生成方法(程序苗条、看着很舒服)
可自己根据需求手动增添注解,也可以通过右键-》refactor-》lomok-》
package com.dvms.entity;/* *文件名: anglerecord *创建者: cjw *创建时间:2020/6/6 14:40 *描述: 记录 */import lombok.allargsconstructor;import lombok.data;import lombok.noargsconstructor;import lombok.tostring;import lombok.experimental.accessors;@data@tostring@allargsconstructor@noargsconstructor@accessors(chain = true) //链式调用public class record { private string time; private string device; private string state;}
优点与缺点(可能出现的问题即解决方法)优点:
lombok能通过注解的方式,在编译时自动为属性生成getter/setter、equals和tostring等方法,省去了手动重建这些代码的麻烦,使程序实体类(entity/pojo)代码看起来更&lsquo;苗条&rsquo;、更有逼格。
缺点(可能出现的问题):
如果是个人开发,可能出现如下问题:
1.lombok目前支持jdk1.8,升级jdk版本后可能失效,解决方法:
a.通过ide自带的快捷键alt+insert生成getter/setter,equals,hashcode,tostring以及构造器等方法;
在最新版本的delombok中,可以使用该工具生成上述这些方法。右键选择refactored->delombok:
或者使用一个命令:
java -jar lombok.jar delombok src -d src-delomboked
把 lombok 注解实现的类文件转换为不使用 lombok 的 java 源文件。
使用lombok可以简化javabean封装,但会影响可读性。此外尽量不要使用使用这个注解@allargsconstructor,该注解提供一个巨型构造器,使外界有机会在初始化对象时修改类中所有的属性是非常不安全的,毕竟java类中对象的某些属性不应被修改。同时,如果某个java类中有好多个属性,那么lombok会注入好多个参数的构造器到java类中,而构造器参数的顺序完全由lombok所控制。
3.使用lombok来编写javabean代码后,其余依赖此javabean的其他代码都需要引入lombok依赖,代码耦合度上升。同时,还需要在ide中安装lombok的插件。
4.如果是协同开发,则需要注意如下问题:
当我们的程序代码中引入了lombok插件,其他人也必须去下载、引入lombok插件,否则java代码可能无法正常运行。
以上就是springboot整合lombok及常见问题怎么解决的详细内容。
其它类似信息

推荐信息