SpringBoot注解--07-- lombok 注解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 1 Lombok介绍
    • 1.1 Lombok是什么?
    • 1.2 如何安装Lombok?
  • 2 Lombok注解
    • 2.1 @Getter@Setter
    • 2.2 @ToString
    • 2.3 @EqualsAndHashCode
    • 2.4 @NoArgsConstructor , @RequiredArgsConstructor ,@AllArgsConstructor
      • @NoArgsConstructor
      • @RequiredArgsConstructor
      • @AllArgsConstructor
    • 2.5 @Data
    • 2.6 @NonNull
  • 3.其他注解大全


1 Lombok介绍

1.1 Lombok是什么?

Lombok是一个通过注解以达到减少代码的Java库,如通过注解的方式减少get,set方法,构造方法等。

  • 使用LomBok之前

在这里插入图片描述

  • 使用LomBok之后
    在这里插入图片描述

1.2 如何安装Lombok?

方法一

  • 通过向lib文件夹中添加lombok.jar包即可,

方法二 如果使用的是Maven,则可在项目的pom.xml文件中添加以下依赖:

  • 1、普通maven项目Lombok依赖为:
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.22</version>
    <scope>provided</scope>
</dependency>
  • 2、SpringBoot项目Lombok的引入方式为:
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

2 Lombok注解

Lombok提供注解方式来提高代码的简洁性,常用注解有:

  • @Data
  • @Setter @Getter
  • @NonNull
  • @Synchronized
  • @ToString
  • @EqualsAndHashCode
  • @Cleanup
  • @SneakyThrows

2.1 @Getter@Setter

作用:为类中的属性提供setter/getter方法

位置:类上方或属性上方,在属性上方则为属性生成setter/getter 方法,在类上方表示给该类下的所有属性生成setter/getter方法

属性:设置setter和getter访问权限

//给类下的所有属性添加Setter/Getter
@Setter
@Getter
public class User {
    //给id属性添加Setter
    @Setter
    private Integer id;
    //给username的setter方法设置私有权限
    @Setter(AccessLevel.PRIVATE)
    private String username;
    //取消password的Getter方法
    @Getter(AccessLevel.NONE)
    private String password;
    private static int age;
    private final String address = null;
}

注:

  1. static修饰的变量不生成getter和setter方法
  2. final修饰的变量只生成getter方法

在IDEA中,按住 Alt+7 可以查看Lombok生成的代码

2.2 @ToString

作用:生成toString方法,默认情况下它会按顺序打印类名称以及 每个字段。

位置:类上方

@ToString有多个属性可以进一步设置:

  • callSuper 是否输出父类的toString方法,默认为false
  • includeFieldNames 是否包含字段名称,默认为true
  • exclude 排除生成tostring的字段
@Setter
@Getter
//给User2设置一个toString方法,该方法不会显示password的值
@ToString(exclude = {"password"})
public class User2 {
    private Integer id;
    private String username;
    private String password;
}

2.3 @EqualsAndHashCode

在这里插入图片描述

作用:生成equals和hashCode、canEqual方法。用于比较两个类 对象是否相同。

位置:类上方

属性:

  • exclude: 比较时排除一些属性
  • of: 比较时只使用一些属性
@Setter
@Getter
@ToString
//@EqualsAndHashCode(exclude = {"password"})
//排除password,只使用id,username对比及计算hash
@EqualsAndHashCode(of = {"username"})
//只使用username对比及计算hash
public class User3 {
    private Integer id;
    private String username;
    private String password;
}

在这里插入图片描述

2.4 @NoArgsConstructor , @RequiredArgsConstructor ,@AllArgsConstructor

@NoArgsConstructor

生成无参构造方法
在这里插入图片描述

@RequiredArgsConstructor(staticName = "newInstance",
 access = AccessLevel.PROTECTED, 
onConstructor_ = {@Deprecated})

public class ChengXiao {
	private String name;
	
	private final int age;
	
	@NonNull
	private String phone;
}

@RequiredArgsConstructor

生成包含final和@NonNull修饰的属性的构造方法
在这里插入图片描述

@RequiredArgsConstructor(staticName = "newInstance", access = AccessLevel.PROTECTED, onConstructor_ = {@Deprecated})
public class ChengXiao {
	private String name;
	
	private final int age;
	
	@NonNull
	private String phone;
}

温馨提示

  • 当类中没有 final 和 @NonNull 注解的成员变量时会生成一个无参构造方法(因为没有符合要求的参数),而很多人认为 @Data会生成无参构造方法就是此导致的

@AllArgsConstructor

生成全参的构造方法
在这里插入图片描述

@Setter
@Getter
//@NoArgsConstructor // 给类提供无参构造方法
@RequiredArgsConstructor // 生成两个username和sex参数的构造方法
@AllArgsConstructor//提供全参构造方法
public class User5 {
    @NonNull
    private Integer id;
    private String username;
    private String password;
    private final String sex;
}

2.5 @Data

相当于同时添加
@Setter、
@Getter、
@ToString、
@EqualsAndHashCode、
@RequiredArgsConstructor 五个注解

在这里插入图片描述

@Data(staticConstructor = "newInstance")
public class Yoona {
	private String nname;
	
	public final static int age = 18;
	
	@NonNull private String address;
}

编译后

public class Yoona {
	private String nname;
	
  	public static final int age = 18;
	
  	@NonNull
  	private String address;
	
  	private Yoona(@NonNull String address) {
    	if (address == null) 
    		throw new NullPointerException("address is marked non-null but is null");
    	this.address = address;
    } 
    
  	public static Yoona newInstance(@NonNull String address) {
  		return new Yoona(address);
  	}
  	/** ---------- setter、getter toString等方法省略 ---------- **/

2.6 @NonNull

作用:用于方法参数前,表示调用该方法时参数不能为null;用于属性上方,表示为该属性赋值时值不能为null

位置:方法参数前或属性上方。

@Setter
@Getter
public class User4 {
    // 调用构造方法或setter给id赋值时,值不能为null
    @NonNull
    private Integer id;
    private String username;
    private String password;
    // 调用sleep方法时,time参数不能为null
    public void sleep(@NonNull Integer time)
   {
        System.out.println("睡觉");
   }
}
// 测试
@SpringBootTest
public class UserTest {
    @Test
    public void testUser() {
        User4 user = new User4();
        user.setId(null);
        user.sleep(null);
   }
}

3.其他注解大全

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java仓库进销存商品库存管理系统springboot+vue

库存管理信息系统研究的内容涉及库存管理的全过程&#xff0c;包括入库、出库、退 货、订货、库存统计查询等等。 根据上述工作流程&#xff0c;库存管理系统将包含以下内容 1&#xff09;登录信息的输入&#xff0c;密码的修改。 2&#xff09;基本信息的输入&#xff0c;包括…

JAVA Web 学习(四)RabbitMQ、Zookeeper

十、消息队列服务器——RabbitMQ RabbitMQ是使用Erlang语言开发的开源消息队列系统&#xff0c;基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、 安全。AMQP协议更多用在企业系统内&#xff0c;对数据一致性、稳定性和可靠性要求…

【实战】阿里智能编码助手通义灵码

文章目录 前言技术积累通义灵码是什么&#xff1f;Copilot是什么&#xff1f;通义灵码主要功能通义灵码有哪些优势&#xff1f;通义灵码支持语言/工具通义灵码接入方式通义灵码帮助中心 实战演示安装插件行/函数级实时续写自然语言生成代码代码优化单元测试生成代码注释生成解释…

Spring 事务原理总结三

今天这篇文章&#xff0c;我想梳理一下Spring事务用到的几个核心组件。这些核心组件是我们理解Spring事务原理的基础。通过它们我们可以体会学习一下Spring设计者设计Spring事务时的基本思路。这些组件是&#xff1a;TransactionInfo、TransactionStatus、TransactionManager、…

【Qt+MSVC2017_64bit +Cmake新建项目编译出错】

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 项目新电脑环境配置 QtMSVC2017_64bit Cmake新建项目编译出错 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; QtMSVC2017_64bit Cmake新建项目编译出错 Running C:\Program Fil…

Java语法学习线程基础

Java语法学习线程基础 大纲 概念创建线程线程终止常用方法用户线程和守护线程线程的七大状态线程的同步互斥锁线程死锁释放锁 具体案例 1.概念 2. 创建线程 第一种&#xff1a; class Cat extends Thread {int time 0;Overridepublic void run() {while (true) {System.o…

Ubuntu 添加字体

Ubuntu 添加字体 Ubuntu如何添加新的字体&#xff1f;似乎远远没有Windows方便呀&#xff0c;查询了一些资料&#xff0c;与大家分享。 方法1 根据字体名称直接安装 oyroy-FMVU08001:~$ sudo apt-get install fonts-wqy-zenhei [sudo] roy 的密码&#xff1a; 正在读取软件…

基于springboot篮球竞赛预约平台源码和论文

随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;篮球竞赛预约平台也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人工管理显然已无法应对时代的变化&#xff0c;而…

【数位dp】【动态规划】【KMP】1397. 找到所有好字符串

作者推荐 【动态规划】【字符串】【表达式】2019. 解出数学表达式的学生分数 本文涉及知识点 动态规划汇总 LeetCode1397. 找到所有好字符串 给你两个长度为 n 的字符串 s1 和 s2 &#xff0c;以及一个字符串 evil 。请你返回 好字符串 的数目。 好字符串 的定义为&#x…

7隐藏进程_Linux_Rootkit.md

Xcellerator 密码学Linux其他逆向工程 文章目录 [Linux Rootkit 第 7 部分&#xff1a;隐藏进程](https://xcellerator.github.io/posts/linux_rootkits_07/)选择要隐藏的 PID隐藏 PID Linux Rootkit 第 7 部分&#xff1a;隐藏进程 2020-10-01 :: TheXcellerator # linux #…

Docker基础与持续集成

docker 基础知识&#xff1a; docker与虚拟机 !左边为虚拟机&#xff0c;右边为docker环境 – Server :物理机服务器Host OS &#xff1a;构建的操作系统Hypervisor &#xff1a;一种虚拟机软件&#xff0c;装了之后才能虚拟化操作系统Guest OS &#xff1a;虚拟化的操作系统…

xlsx xlsx-style 使用和坑记录

1 安装之后报错 npm install xlsx --savenpm install xlsx-style --save Umi运行会报错 自己代码 import XLSX from "xlsx"; import XLSXStyle from "xlsx-style";const data [["demo1","demo2","demo3","demo4&quo…

cesium-水平测距

cesium测量两点间的距离 <template><div id"cesiumContainer" style"height: 100vh;"></div><div id"toolbar" style"position: fixed;top:20px;left:220px;"><el-breadcrumb><el-breadcrumb-item&…

『运维备忘录』之 Cron 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…

Logback学习

logback 1、logback介绍 Logback是由log4j创始人设计的另一个开源日志组件&#xff0c;性能比log4j要好。 lockback优点&#xff1a; 内核重写、测试充分、初始化内存加载更小&#xff0c;这一切让logback性能和log4j相比有诸多倍的提升。logback非常自然地直接实现了slf4j…

CSS的元素显示模式

一&#xff0c;什么是元素显示模式 元素显示模式是指元素以什么方式显示&#xff0c; 作用&#xff1a;了解不同类型的标签可以更好的布局网页。 HTML元素一般分为块元素和行内元素。 1.1块元素 常见的块元素有&#xff1a;<p><ul><ol><li>,<di…

OJ_成绩排序2

题干 c实现 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<vector> #include<algorithm> using namespace std;struct student {char name[16];int score;int seq; };bool comparefromhightolow(student a, student b) {if (a.score > b.…

4通过干扰 Char 设备为 PRNG 添加后门_Linux_Rootkit.md

Xcellerator 密码学Linux其他逆向工程 文章目录 [Linux Rootkit 第 4 部分&#xff1a;通过干扰 Char 设备为 PRNG 添加后门](https://xcellerator.github.io/posts/linux_rootkits_04/)Linux 中的字符设备字符设备的读取例程编写 Rootkit我们能去哪里呢&#xff1f; Linux Ro…

c#string方法对比

字符串的截取匹配操作在开发中非常常见&#xff0c;比如下面这个示例&#xff1a;我要匹配查找出来字符串数组中以“abc”开头的字符串并打印&#xff0c;我下面分别用了两种方式实现&#xff0c;代码如下&#xff1a; using System; namespace ConsoleApp23{ class Progra…

iOS应用提交上架的最新流程

摘要 本篇博客介绍了iOS应用程序上架的最新流程。包括上架基本需求资料、证书的创建和使用、测试设备的添加、描述文件的创建、打包、审核等步骤。 引言 在开发完iOS应用程序后&#xff0c;我们需要将其提交到App Store上架。然而&#xff0c;随着技术的不断发展&#xff0c;…