首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

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

编程知识
2024年09月02日 10:50

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

@

目录


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. 最后:

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

在这里插入图片描述

From:https://www.cnblogs.com/TheMagicalRainbowSea/p/18392433
本文地址: http://www.shuzixingkong.net/article/1657
0评论
提交 加载更多评论
其他文章 PyTorch从入门到放弃之张量模块
目录张量的数据类型torch.rand()函数torch.randn()函数torch.normal()函数torch.linspace()函数torch.manual_seed()函数torch.ones()、torch.zeros()、torch.eye()张量的基本操作增加和删除维度交换维度拼
PyTorch从入门到放弃之张量模块 PyTorch从入门到放弃之张量模块 PyTorch从入门到放弃之张量模块
Go plan9 汇编:内存对齐和递归
原创文章,欢迎转载,转载请注明出处,谢谢。 Go plan9 汇编系列文章: Go plan9 汇编: 打通应用到底层的任督二脉 Go plan9 汇编:手写汇编 Go plan9 汇编:说透函数栈 Go plan9 汇编:内存对齐和递归 0. 前言 在 Go plan9 汇编系列文章中,介绍了函数
又一个Rust练手项目-wssh(SSH over Websocket Client)
原文地址https://blog.fanscore.cn/a/61/ 1. wssh 1.1 开发背景 公司内部的发布系统提供一个连接到k8s pod的web终端,可以在网页中连接到k8s pod内。实现原理大概为通过websocket协议代理了k8s pod ssh,然后在前端通过xterm.js
又一个Rust练手项目-wssh(SSH over Websocket Client) 又一个Rust练手项目-wssh(SSH over Websocket Client) 又一个Rust练手项目-wssh(SSH over Websocket Client)
WiFi基础(二):最新WiFi信道、无线OSI模型与802.11b/g/n
liwen01 2024.09.01 前言 最近十几年,通信技术发展迅猛,通信标准更新频繁,有的设备还在使用 802.11/b/g/n 协议,有的已支持到 WiFi6、WiFi7。 而国内有关无线 WiFi 的书籍或资料却很少,就算能找着的,大多也是比较老旧。本文试图使用最新的数据来介绍 WiFi
WiFi基础(二):最新WiFi信道、无线OSI模型与802.11b/g/n WiFi基础(二):最新WiFi信道、无线OSI模型与802.11b/g/n WiFi基础(二):最新WiFi信道、无线OSI模型与802.11b/g/n
manim边学边做--带箭头直线
带箭头的直线就是有方向的直线,既可以用来表示矢量,也可以用来标记某个关键位置。manim中提供了4种常用的带箭头的直线模块: Arrow:单箭头的直线 DoubleArrow:双箭头的直线 LabeledArrow:带标签的直线 Vector:向量 其中,DoubleArrow,LabeledArr
manim边学边做--带箭头直线 manim边学边做--带箭头直线 manim边学边做--带箭头直线
《花100块做个摸鱼小网站! 》第五篇—通过xxl-job定时获取热搜数据
⭐️基础链接导航⭐️ 服务器 → ☁️ 阿里云活动地址 看样例 → &#128031; 摸鱼小网站地址 学代码 → &#128187; 源码库地址 一、前言 我们已经成功实现了一个完整的热搜组件,从后端到前端,构建了这个小网站的核心功能。接下来,我们将不断完善其功能,使其更加美观和实用。今天的主题是
《花100块做个摸鱼小网站! 》第五篇—通过xxl-job定时获取热搜数据 《花100块做个摸鱼小网站! 》第五篇—通过xxl-job定时获取热搜数据 《花100块做个摸鱼小网站! 》第五篇—通过xxl-job定时获取热搜数据
.NET 8.0 前后分离快速开发框架
前言 大家好,推荐一个.NET 8.0 为核心,结合前端 Vue 框架,实现了前后端完全分离的设计理念。它不仅提供了强大的基础功能支持,如权限管理、代码生成器等,还通过采用主流技术和最佳实践,显著降低了开发难度,加快了项目交付速度。 如果你需要一个高效的开发解决方案,本框架能帮助大家轻松应对挑战,实
.NET 8.0 前后分离快速开发框架 .NET 8.0 前后分离快速开发框架 .NET 8.0 前后分离快速开发框架
写在临近四十岁的年龄
人生有那么一首诗,往往当你拥有他的时候,你没有读懂他,可是当你读懂他的时候,你却失去了他,这首诗就是青春。“一寸光阴一寸金,寸金难买寸光阴”,学生时代的作文中,已经被我们用烂了的词汇,时至今日,终于才深刻理解这句话的重要意义。光阴的确是无价的,一旦错过却无法追回,一寸光阴又何止一寸金呢。古人说过“三