当前位置:

首页 > 编程开发 > SpringBoot整合Lombok及常见问题怎么解决

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

LombokLombok能以简单的注解形式来简化java代码,从而提高开发人员的开发效率。其本身是一个优秀的Java代码库,它采用了一种投机取巧的语法糖,简化了Java的编码,为Java代码的精简提供了一种方式,但Lombok并非一个标准的Java库。在web开发过程中经常需要写的Java类,都需要花时间去添加相应的getter/setter、构造器和equals等方法。当属性多时会出现大量的getter/setter方法,这些显得很冗长也没有太多技术含量,一旦修改属性,容易出现忘记修改对应方法的情况。官

本文目录

    Lombok

    Lombok能以简单的注解形式来简化java代码,从而提高开发人员的开发效率。其本身是一个优秀的Java代码库,它采用了一种投机取巧的语法糖,简化了Java的编码,为Java代码的精简提供了一种方式,但Lombok并非一个标准的Java库。

    在web开发过程中经常需要写的Java类,都需要花时间去添加相应的getter/setter、构造器和equals等方法。当属性多时会出现大量的getter/setter方法,这些显得很冗长也没有太多技术含量,一旦修改属性,容易出现忘记修改对应方法的情况。

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

    官方网站: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方法

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

    2. Lombok注解失效原因

    在pom.xml引入Lombok依赖后,还需要安装Lombok插件,重启IDEA才能生效。

    整合过程

    1. 引入Lombok依赖:

    复制如下代码并插入pom.xml当中,等待maven仓库自动下载安装依赖,没有设置自动导包点击手动导入。

    
            
                org.projectlombok
                lombok
                
                1.18.12
                provided
            

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

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

    2. 安装Lombok插件

    在IDEA中点击File-》Setting-》Plugins-》搜索Lombok安装插件后,重启IDEA;

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

    3. 利用Lombok为属性生成getter/setter等方法程序代码示例

    a.未使用Lombok编写实体类(程序肥胖、不好看)

    使用IDE自带的快捷键能自动生成getter/setter这些方法:

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

    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-》

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

    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)代码看起来更‘苗条’、更有逼格。

    缺点(可能出现的问题):
    如果是个人开发,可能出现如下问题:

    1.Lombok目前支持JDK1.8,升级JDK版本后可能失效,解决方法:
    a.通过IDE自带的快捷键Alt+Insert生成getter/setter,equals,hashCode,toString以及构造器等方法;

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

    b.使用DeLombok工具生成上述这些方法,在最新版本中已包含DeLombok。右键选择Refactored->DeLombok:

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

    或者使用一个命令:

    java -jar lombok.jar delombok src -d src-delomboked

    把 Lombok 注解实现的类文件转换为不使用 Lombok 的 Java 源文件。

    2.Lombok隐藏了JavaBean封装的细节,程序看着简洁但是可读性差。此外尽量不要使用使用这个注解@AllArgsConstructor,该注解提供一个巨型构造器,使外界有机会在初始化对象时修改类中所有的属性是非常不安全的,毕竟Java类中对象的某些属性不应被修改。同时,如果某个Java类中有好多个属性,那么Lombok会注入好多个参数的构造器到Java类中,而构造器参数的顺序完全由Lombok所控制。

    3.使用Lombok来编写Javabean代码后,其余依赖此javabean的其他代码都需要引入Lombok依赖,代码耦合度上升。同时,还需要在IDE中安装Lombok的插件。

    4.如果是协同开发,则需要注意如下问题:
    当我们的程序代码中引入了Lombok插件,其他人也必须去下载、引入Lombok插件,否则Java代码可能无法正常运行。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    springBoot项目常用目录有哪些
    springBoot项目常用目录有哪些

    springBoot项目常用目录springBoot项目的目录结构及名规范介绍基于SpringBoot开发时的目录结构及命名规范,通过介绍能够为你解决,在实际项目中如何规划目录结构?如何命名目录更规范?各个目录分别代表什么含义?等三个问题。目录说明servicex//项目名|-admin-ui//管理服务前端代码(一般将UI和SERVICE放到一个工程中,便于管理)|-servicex-auth//模块1|-servicex-common//模块2|-servicex-gateway//模块3|-serv

    Lombok插件安装指导:专家建议和步骤
    Lombok插件安装指导:专家建议和步骤

    专业指导:Eclipse安装Lombok插件的专家建议和步骤,需要具体代码示例摘要:Lombok是一种Java库,能够通过注解的方式简化Java代码的编写,并提供了一些功能强大的工具。本文将向读者介绍如何在Eclipse中安装和配置Lombok插件的步骤,并提供一些具体的代码示例,以便读者能够更好地理解和使用Lombok插件。下载Lombok插件首先,我们需

    Lombok插件的完全安装指南:Eclipse的使用方法
    Lombok插件的完全安装指南:Eclipse的使用方法

    完全指南:Eclipse如何安装Lombok插件,需要具体代码示例引言:Eclipse是一个广泛使用的集成开发环境(IDE),用于Java开发。Lombok是一个Java库,可以自动化一些繁琐的代码,从而提高开发效率。本文将详细介绍如何在Eclipse中安装Lombok插件,并提供具体的代码示例。第一步:下载Lombok插件打开Eclipse,选择“Help

    简单指南:如何在Eclipse上轻松安装Lombok插件
    简单指南:如何在Eclipse上轻松安装Lombok插件

    实用技巧:Eclipse如何轻松安装Lombok插件,需要具体代码示例在日常的Java开发中,我们经常会使用到Eclipse作为主要的集成开发环境。而在实际开发中,我们可能会遇到一些繁琐的操作,比如Getter和Setter方法的手动编写。为了简化这些操作,我们可以使用Lombok插件来自动帮助我们生成这些代码。下面将介绍如何在Eclipse中轻松安装和配置

    简单指南:在Eclipse中快速安装Lombok插件
    简单指南:在Eclipse中快速安装Lombok插件

    快速入门:Eclipse中安装Lombok插件的简易教程,需要具体代码示例在开发Java项目过程中,常常会使用到Lombok这个实用的插件。Lombok可以帮助我们简化Java代码,减少样板代码的编写,提升开发效率。本文将为你介绍如何在Eclipse中安装和配置Lombok插件,并提供具体的代码示例。步骤一:下载Lombok插件首先,我们需要从Lombok官

    解析SpringBoot和SpringMVC之间的异同
    解析SpringBoot和SpringMVC之间的异同

    解析SpringBoot和SpringMVC之间的异同SpringBoot和SpringMVC是Java领域中非常重要的开发框架。虽然它们都属于Spring框架的一部分,但是在使用和功能上有一些明显的区别。本文将对SpringBoot和SpringMVC进行比较,解析它们之间的异同。首先,让我们来了解一下SpringBoot。SpringBo

    探索SpringCloud和SpringBoot在微服务领域的不同应用方式
    探索SpringCloud和SpringBoot在微服务领域的不同应用方式

    近年来,随着云计算和分布式架构的兴起,微服务架构的应用越来越广泛。而SpringCloud和SpringBoot作为Java开发中的两个重要框架,对于微服务的实现起到了重要的作用。然而,很多人对于它们在微服务领域的不同应用方式还存在一定的疑惑。本文将从不同的角度探索SpringCloud和SpringBoot在微服务中的应用方式。首先,我们来了解一下Spri

    SpringBoot和SpringMVC有何区别?
    SpringBoot和SpringMVC有何区别?

    SpringBoot与SpringMVC的不同之处在哪里?SpringBoot和SpringMVC是两个非常流行的Java开发框架,用于构建Web应用程序。尽管它们经常分别被使用,但它们之间的不同之处也是很明显的。首先,SpringBoot可以被看作是一个Spring框架的扩展或者增强版。它旨在简化Spring应用程序的初始化和配置过程,以帮助开发人

    比较SpringBoot和SpringMVC的异同
    比较SpringBoot和SpringMVC的异同

    SpringBoot和SpringMVC都是Java开发中常用的框架,但它们之间有一些明显的差异。本文将探究这两个框架的特点和用途,并对它们的差异进行比较。首先,我们来了解一下SpringBoot。SpringBoot是由Pivotal团队开发的,它旨在简化基于Spring框架的应用程序的创建和部署。它提供了一种快速、轻量级的方式来构建独立的、可执行

    SpringBoot与SpringMVC的不同点是什么?
    SpringBoot与SpringMVC的不同点是什么?

    SpringBoot和SpringMVC是Java开发中常用的两个框架,它们都是由Spring框架所提供的,但在功能和使用方式上有着一些区别。本文将分别介绍SpringBoot和SpringMVC的特点和区别。一、SpringBoot的特点:简化配置:SpringBoot通过约定优于配置的原则,大大简化了项目的配置过程。它可以自动配置项目所需要的参数,开发人

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。