当前位置:网站首页>【Lombok快速入门】
【Lombok快速入门】
2022-04-23 05:59:00 【一鸭一鸭唷】
一、安装Lombok
idea安装插件

二、加入依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.0</version>
<scope>provided</scope>
</dependency>

三、注解
1.@Getter/@Setter
自动产生 getter/setter

2.@ToString
自动重写 toString() 方法,会印出所有变量

3.@EqualsAndHashCode
自动生成 equals(Object other) 和 hashcode() 方法,包括所有非静态变量和非 transient 的变量

如果某些变量不想要加进判断,可以透过 exclude 排除,也可以使用 of 指定某些字段

- Q : 为什么只有一个整体的 @EqualsAndHashCode 注解,而不是分开的两个 @Equals 和 @HashCode?
- A : 在 Java 中有规定,当两个对象 equals 时,他们的 hashcode 一定要相同,反之,当 hashcode 相同时,对象不一定 equals。所以 equals 和 hashcode 要一起实现,免得发生违反 Java 规定的情形发生
4.@NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor
这三个很像,都是在自动生成该类的构造器,差别只在生成的构造器的参数不一样而已
- @NoArgsConstructor : 生成一个没有参数的构造器

- @AllArgsConstructor : 生成一个包含所有参数的构造器

这里注意一个 Java 的小坑,当我们没有指定构造器时,Java 编译器会帮我们自动生成一个没有任何参数的构造器给该类,但是 如果我们自己写了构造器之后,Java 就不会自动帮我们补上那个无参数的构造器了
然而很多地方(像是 Spring Data JPA),会需要每个类都一定要有一个无参数的构造器,所以你在加上 @AllArgsConstructor 时,一定要补上 @NoArgsConstrcutor,不然会有各种坑等着你
- @RequiredArgsConstructor : 生成一个包含 “特定参数” 的构造器,特定参数指的是那些有加上 final 修饰词的变量们

补充一下,如果所有的变量都是正常的,都没有用 final 修饰的话,那就会生成一个没有参数的构造器
5. @Data
整合包,只要加了 @Data 这个注解,等于同时加了以下注解
- @Getter/@Setter
- @ToString
- @EqualsAndHashCode
- @RequiredArgsConstructor

6. @Value
也是整合包,但是他会把所有的变量都设成 final 的,其他的就跟 @Data 一样,等于同时加了以下注解
- @Getter (注意没有setter)
- @ToString
- @EqualsAndHashCode
- @RequiredArgsConstructor

上面那个 @Data 适合用在 POJO 或 DTO 上,而这个 @Value 注解,则是适合加在值不希望被改变的类上,像是某个类的值当 创建后就不希望被更改,只希望我们读它而已,就适合加上 @Value 注解,也就是 @Value for immutable class 另外注意一下,此 lombok 的注解 @Value 和另一个 Spring 的注解 @Value 撞名,在 import 时不要 import 错了
7. @Builder
自动生成流式 set 值写法,从此之后再也不用写一堆 setter 了

注意,虽然只要加上 @Builder 注解,我们就能够用流式写法快速设定对象的值,但是 setter 还是必须要写不能省略的,因为 Spring 或是其他框架有很多地方都会用到对象的 getter/setter 对他们取值/赋值 所以通常是 @Data 和 @Builder 会一起用在同个类上,既方便我们流式写代码,也方便框架做事
8. @Slf4j
自动生成该类的 log 静态常量,要打日志就可以直接打,不用再手动 new log 静态常量了

除了 @Slf4j 之外,lombok 也提供其他日志框架的变种注解可以用,像是 @Log、@Log4j…等,他们都是帮我们创建一个静态 常量 log,只是使用的库不一样而已
SpringBoot默认支持的就是 slf4j + logback 的日志框架,所以也不用再多做啥设定,直接就可以用在 SpringBoot project上, log 系列注解最常用的就是 @Slf4j
版权声明
本文为[一鸭一鸭唷]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_44707283/article/details/120157069
边栏推荐
- ES6 specification details
- 【代码解析(6)】Communication-Efficient Learning of Deep Networks from Decentralized Data
- 【代码解析(5)】Communication-Efficient Learning of Deep Networks from Decentralized Data
- Leak detection and vacancy filling (V)
- 多线程
- 微信小程序
- LeetCode刷题|38外观数组
- 【代码解析(4)】Communication-Efficient Learning of Deep Networks from Decentralized Data
- leetcode刷题之整数加一
- LeetCode刷题|897递增顺序搜索树
猜你喜欢
随机推荐
百度地图案例-缩放组件、地图比例组件
LeetCode刷题|368最大整除子集(动态规划)
SQL学习|集合运算
浏览器工作原理与实践
useCenterHook
1-2 JSX语法规则
Installing redis using a small leather panel in the window environment
tensorflow下载
Curry realization of function continuous call calculation and accumulation
surprise库中evaluate函数弃用解决方法
ebfp编程常用API介绍
China creates vast research infrastructure to support ambitious climate goals
Imitation scallop essay reading page
LeetCode刷题|两个链表的第一个公共节点
JS实现模态框拖拽
JS regular matching first assertion and last assertion
EF CORE在ASP.NET CORE项目中基于数据库优先模式生成实体模型
file_get_contents 访问 ssl 错误的两种解决方法
百度地图坐标、Google坐标、腾讯坐标相互转化
The time format is incorrect, and an error is reported when running the SQL file









