六,Spring Boot 容器中 Lombok 插件的详细使用,简化配置,提高开发效率

news2024/9/24 19:19:28

六,Spring Boot 容器中 Lombok 插件的详细使用,简化配置,提高开发效率

文章目录

  • 六,Spring Boot 容器中 Lombok 插件的详细使用,简化配置,提高开发效率
  • 1. Lombok 介绍
  • 2. Lombok 常用注解
    • 2.1 @ToString
    • 2.2 @Setter
    • 2.3 @Data
    • 2.4 @AllArgsConstructor
    • 2.5 @NoArgsConstructor
  • 3. 在 idea 中 安装 lombok插件
  • 4. 总结:
  • 6. 最后:


1. Lombok 介绍

Lombok 作用:

  1. 简化 Java Bean开发,可以使用 Lombok 的注解让代码更加简洁。
  2. Java项目中,很多没有技术含量但又必须存在的代码;比如:Pojo 的 getter/setter/toString ;异常处理:I/O流的关闭操作等等。
  3. Java项目中,很多没有技术含量但又必须存在的代码:比如:这些代码既没有技术含量,又影响着代码的美观,Lombok 应运而生。

Spring Boot 和 IDEA 官方支持

  1. IDEA 2020已经内置了 Lombok插件
  2. Spring Boot 2.1.x之后的版本也在 Stater中内置了 Lombok 依赖

2. Lombok 常用注解

@Data:注解在类上,提供类所有属性的getting和setting方法,此外还提供了equals,canEqual,hashCode,toString方法
@Setter: 注解在属性上,为属性提供 setting 方法,注解在类上,则为类中的所有属性提供 set()方法。
@Getter: 注解在属性上,为属性提供 getting 方法注解在类上,则为类中的所有属性提供 get()方法。
@Log4j:注解在类上:为类提供了一个属性名为: log 的 log4j的日志对象
@NoArgsConstructor: 注解在类上,为类提供一个无参的构造方法,(一定会提供)
@AllArgsConstructor: 注解在类上,为类提供一个全参的构造方法
@Cleanup: 可以关闭流
@Builder: 被注解的类加个构造者模式
@Synchronized: 加同步锁 
@SneakyThrows: 等同于try/catcher捕获异常
@NonNull:如果给参数加个这个注解,参数为null会抛出空指针异常
@Value: 注解和@Value类似,区别在于它会把所有成员变量默认定义为 private final 修饰,并且不会生产set()方法 

下面我们测试,使用几个,在开发中比较常用的注解

首先想要使用上 Lombok 需要导入相关 jar 依赖,也可以不用特别导入,直接使用 Spring Boot 自带内置的即可。

在这里插入图片描述

   <!--        引入 lombok ,使用版本仲裁-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.rainbowsea</groupId>
    <artifactId>springboot_lombok</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--    导入SpringBoot 父工程-规定写法-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.3</version>
    </parent>


    <dependencies>
        <!--    导入web项目场景启动器:会自动导入和web开发相关的jar包所有依赖【库/jar】-->
        <!--    后面还会在说明spring-boot-starter-web 到底引入哪些相关依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--        引入 lombok ,使用版本仲裁-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

</project>

2.1 @ToString

@ToString: // 在编译时,生成 toString,注意:默认情况下,会生成一个无参构造器。

在这里插入图片描述

package com.rainbowsea.springboot.bean;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;




@ToString  // 在编译时,生成 toString,注意:默认情况下,会生成一个无参构造器
public class Furn {
    private Integer id = 100;
    private String name = "张三";
    private Double price = 999.0;


}

使用 lombok 注解简化代码,可以通过 idea 自带的反编译功能 target,看Furn.class的源码,就
可以看到生成的完整代码。

如果目录当中没有 target 目录显示,可以进行如下操作:

在这里插入图片描述

在这里插入图片描述

2.2 @Setter

@Setter 注解: 注解在属性上,为属性提供 setting 方法,注解在类上,则为类中的所有属性提供 set()方法。

首先,我们先注解使用在属性上。

在这里插入图片描述

package com.rainbowsea.springboot.bean;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;


public class Furn {

    @Setter // 注解在属性上,编译生成一个,该属性的 set()方法:默认情况下,会生成一个无参构造器
    private Integer id = 100;

    private String name = "张三";
    private Double price = 999.0;


}

在这里插入图片描述

添加到类上,为类中所有的属性都添加,set() 方法。

在这里插入图片描述

在这里插入图片描述

2.3 @Data

@Data :注解在类上,提供类所有属性的getting和setting方法,此外还提供 equals,canEqual,hashCode,toString方法, @RequiredArgsConstructor

特别说明: @Data 中的 @RequiredArgsConstructor
在我们写controller 或是 Service层的时候,需要注入很多的 mapper接口或者另外的service接口,这时候就会写很多
的@Autowired注解,代码看起来很乱。Lombok 提供了一个注解:
@RequiredArgsConstructor(onConstructor=@_(@AutoWired))
写在类上可以代替@Autowired注解,需要注意的时在注入时,需要用final定义,或者使用 @notnull注解

在这里插入图片描述

package com.rainbowsea.springboot.bean;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;



@Data// 注解等价使用了,如下注解: @Getter,@Setter,@RequiredArgsConstructor @ToString,@EqualsAndHas
public class Furn {

    private Integer id = 100;

    private String name = "张三";
    private Double price = 999.0;


}

在这里插入图片描述

2.4 @AllArgsConstructor

@AllArgsConstructor:在编译时,会生成全参数构造器

在这里插入图片描述

package com.rainbowsea.springboot.bean;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;



@AllArgsConstructor // 在编译时,会生成全参数构造器
public class Furn {

    private Integer id = 100;

    private String name = "张三";
    private Double price = 999.0;


}

在这里插入图片描述

注意:这里:我们会发现一点,就是有全参数构造器,但是,却没有生成一个默认的“无参数构造器”

2.5 @NoArgsConstructor

@NoArgsConstructor: 在编译时,会生成无参构造器(一定会生成),不会受到其它的

在这里插入图片描述

package com.rainbowsea.springboot.bean;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;


@NoArgsConstructor //在编译时,会生成无参构造器(一定会生成),不会受到其它的
public class Furn {

    private Integer id = 100;

    private String name = "张三";
    private Double price = 999.0;


}

在这里插入图片描述

特别说明:

特别说明,虽然上面的@Data,@ToString注解等等,默认情况下都会生成一个无参构造器,但是当你使用了多个注解的时候,可能会覆盖掉无参构造器。 但是当我们有其它多个构造器生成时,你如果你希望仍然有无参构造器就需要使用 @NoArgsConstructor 注解了,因为 @NoArgsConstructor是一定会生成一个无参构造器的(无参构造器很重要,因为框架的使用是涉及到反射机制的,而反射机制,需要一个无参构造器,否则你就无法进行反射获取 bean对象,框架也就无法使用了)。

如下:测试。我们添加上 @Data注解和 @AllArgsConstructor 注解。可以明显的发现,默认的无参数构造器被覆盖掉了

在这里插入图片描述

所以我们需要添加上:@NoArgsConstructor注解,因为@NoArgsConstructor注解,在编译时,会生成无参构造器(一定会生成),不会受到其它的影响,被覆盖。如图

在这里插入图片描述

3. 在 idea 中 安装 lombok插件

不装插件也可以用基本的注解比如:@Data,@Getter…
但是不能使用其扩展功能,比如日志输出…,所以我们还是安装一下,也比较简单。
直接去插件商城,搜索: Lombok 即可

在这里插入图片描述

在这里插入图片描述

package com.rainbowsea.springboot.controller;


import com.rainbowsea.springboot.bean.Furn;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@Slf4j
@RestController  // @Controller + @ResponseBody
public class HiController {


    @Autowired
    private Furn furn;


    @RequestMapping("/hi") // 设置请求映射路径
    public String hi(){
        log.info("furn-"+furn);

        // 占位符方式输出
        log.info("furn={} myfurn={}",furn,furn);


        return  "hi word";
        // 使用 slf4j日志输出
    }
}

运行测试:

在这里插入图片描述

4. 总结:

  1. 熟悉常用的 Lombok 注解,提供开发效率。
  2. 基本上@注解都会生成一个默认的无参构造器,但是当存在多个注解的时候,这个默认的无参构造器,可能会被覆盖掉,从而导致无法不会被生成。但是,框架的上的使用,基本上都是需要使用上反射 机制的,而反射机制是必须要有一个无参构造器 才可以进行反射,获取到对应的 Bean对象。给框架使用。所以,一般的 bean 对象都会添加上一个@NoArgsConstructor注解该在编译时,会生成无参构造器(一定会生成),不会受到其它的

6. 最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2110451.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字经济时代,零售企业如何实现以消费者为中心的数字化转型?

在数字经济时代&#xff0c;零售企业正面临着前所未有的挑战与机遇。随着消费者行为的数字化和多样化&#xff0c;传统的零售模式已难以满足市场需求。为了在激烈的市场竞争中立于不败之地&#xff0c;零售企业必须实现以消费者为中心的数字化转型。这一转型不仅仅是技术的升级…

[ios]准备好app后使用xcode发布ios操作

在app代码完成后&#xff0c;点击xcode进行发布

嵌入式开发学习路线(25届校招学习) 嵌入式学习路线七年规划:从大一小白到校招大佬 (学习路线汇总)

嵌入式开发学习路线&#xff08;25届校招可以参考&#xff09; 嵌入式系统作为当前最热门且最有发展前途的IT应用领域之一&#xff0c;吸引了大量有志于从事该行业的学习者。为了系统地掌握嵌入式开发技能&#xff0c;以下是一条详细的学习路线&#xff0c;旨在帮助初学者逐步…

算法:图片压缩算法【Z字行扫描】(Java实现)

要在Java中实现Z字形扫描&#xff0c;我们需要遍历一个给定的nn矩阵&#xff0c;并按照Z字形的顺序输出其元素。Z字形扫描的路径通常是从矩阵的左上角开始&#xff0c;沿着对角线方向交替向下和向上移动&#xff0c;直到遍历完整个矩阵。 下面是一个简单的Java实现示例&#xf…

不同vlan之间的通信方法

1.通过路由器的物理接口 1.给PC1,PC2配置IP地址&#xff0c;网关2.进入交换机配置vlan&#xff0c;交换机所有口都配置access口并绑定vlan3.配置路由器&#xff0c;进入路由器的两个接口配置网关IP和掩码缺点&#xff1a;成本高&#xff0c;每增加一个vlan就需要一个物理端口和…

【项目管理】项目管理办公室 --- PMO

项目管理办公室 PROJECT MANAGEMENT OFFICE 简称PMO 项目管理办公室Project Management Office&#xff0c;简称PMO 是现代企业管理中一个至关重要的组成部分&#xff0c;特别是在那些依赖项目驱动战略的企业中。 PMO的设立旨在提升项目管理的专业性和一致性&#xff0c;通过…

ctfshow-文件包含(web78-web88/web116-web117)

web78 <?phpif(isset($_GET[file])){$file $_GET[file];include($file); }else{highlight_file(__FILE__); } 判断是否存在file参数 如果存在 将包含这个参数值 文件 php://filter可以获取指定文件源码。当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执…

智能生成ppt使用什么软件?免费生成软件大盘点

在快节奏的商务交流、生动有趣的课堂教育以及各类激情洋溢的演讲场合中&#xff0c;PPT&#xff08;PowerPoint Presentation&#xff09;无疑是我们不可或缺的信息传递利器。 然而&#xff0c;设计一份既视觉吸睛又能精准传达核心信息的PPT&#xff0c;往往需要耗费大量的时间…

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(1)

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正​​ 事先声明:该工具我是跟唐老师教程来的&#xff0c;并非原创&#xff0c;仅作学习笔记交流 1.需求分析 最终目的就如…

从供货上游到下游消费者平台搭建 多商家供货供应链商城开发关键点

搭建一个多商家供货的供应链商城、从供货上游到下游消费者的综合供应链平台是一个复杂的事情。但这样的平台能高效地连接供应链的各个环节&#xff0c;还能保证信息的流畅传递和业务的高效运作。今天&#xff0c;商淘云为您分享从供货上游到下游消费者的平台搭建的4大关键点&am…

MLLM(二)| 阿里开源视频理解大模型:Qwen2-VL

2024年8月29日&#xff0c;阿里发布了 Qwen2-VL&#xff01;Qwen2-VL 是基于 Qwen2 的最新视觉语言大模型。与 Qwen-VL 相比&#xff0c;Qwen2-VL 具有以下能力&#xff1a; SoTA对各种分辨率和比例的图像的理解&#xff1a;Qwen2-VL在视觉理解基准上达到了最先进的性能&#…

Qt中使用DAG(有向无环图)

之前做的一个视觉检测项目&#xff0c;本来各个视觉检测工具之间是独立的&#xff0c;单独执行图像输入、得出结果&#xff0c;然后综合汇总结果&#xff0c;简单明了。 后来要求工具之间能存在依赖关系&#xff0c;也就是A工具的输出可以作为B工具的输入&#xff0c;这样就很麻…

【Android】ViewPager基本用法总结

文章目录 一、添加ViewPager控件二、构建适配器类三、在 MainActivity 中设置适配器示例一&#xff1a;图片切换适配器MainActivity 示例二&#xff1a;Fragment切换适配器FragmentMainActivity ViewPager 是 Android 中一个用于在同一屏幕上滑动不同页面&#xff08;通常是左右…

【C++】C++中的花式操作:lambda表达式、类成员初始化列表、三元运算符、运算符及其重载。。。

八、C中的花式操作&#xff1a;lambda表达式、构造函数初始化列表、三元运算符 10、lambda表达式 见mutable关键字&#xff1a;【C】C中的关键字&#xff1a;const、mutable、auto、new....-CSDN博客。 11、构造函数初始化列表 当我们编写一个类时&#xff0c;一般都要有一个…

鼠标指针美化 一大批鼠标指针特效 喜欢的快点收藏~!

鼠标指针美化 一大批鼠标指针特效 喜欢的快点收藏~&#xff01;鼠标指针美化&#xff0c;这个功能可能许多人都没用过&#xff0c;应该还有很多人都是用着系统默认的鼠标指针&#xff0c;我们今天给大家分享一个可以修改鼠标指针的工具&#xff0c;如果你也喜欢&#xff0c;那麻…

类比推理-错题集

001 解析 &#xff1a; 002

[Visual Stuidio 2022使用技巧]3.模板

本文主要介绍本人在使用vs2022开发WPF桌面程序时使用到的一些插件及配置。 语言&#xff1a;C# IDE&#xff1a;Microsoft Visual Studio Community 2022 框架&#xff1a;WPF&#xff0c;.net 8.0 一、工程模板 1.1 创建模板 编辑好模板代码&#xff0c;扩展及NuGet包之…

【2024全国大学生数学建模竞赛】E题 模型建立与求解(含代码与论文)

目录 一、问题重述 1.1 问题背景 1.2 问题回顾与分析 四、问题求解与分析 4.1 问题1求解与分析 4.1.1 问题1分析 4.1.2 问题1建模与求解 按照提交论文的格式进行撰写&#xff01;完整版请看文章最后&#xff01; 一、问题重述 1.1 问题背景 随着城市化进程的加快、机动…

mysql笔记3(数据库和表的基础操作)

文章目录 一、数据库的基础操作1. 显示所有的仓库(数据库)2. 创建数据库注意(命名规范)&#xff1a; 3. 删除数据库4. 查看创建数据库的SQL5. 创建数据库时跟随字符编码6. 修改数据库的字符编码 二、表的基础操作1. 引入表的思维2. 引用数据库3. 查看该数据库下面的表4. 创建表…

微信小程序webgl 显示图片

// wxml <view class"container"><!-- 加载地图容器 --><canvas type"webgl" id"testMap" style"width: 100%; height: 100%;" disable-scroll bindtouchstart"touchStart" bindtouchmove"touchMove&qu…