前言

Lombok想要解决了的是在我们实体Bean中大量的Getter/Setter方法,以及toString, hashCode等可能不会用到,但是某些时候仍然需要复写,以期方便使用的方法;在使用Lombok之后,将由其来自动帮你实现代码生成,注意,其是在运行过程中,帮你自动生成的。就是说,将极大减少你的代码总量。
Lombok的官方地址: https://projectlombok.org/
其实说实话第一次听到Lombok的时候,是从一个带我的匈牙利老师傅那里学来的。那个时候他给了我一套JPA的代码来访问数据库。 当我打开代码的时候,看到满屏幕的错误,打开实体Entity类一看,就一些成员变量的定义,完全没有setter 与getter的方法。 当时我就凌乱了,这什么啊。 后来当他告诉我 去查查lombok我才恍然大悟。
其实对于Java来说我一直都是爱与恨相互纠结。 一方面,Java确实是一种非常成熟的编程语言,具体很多开源的框架跟库,使得开发相对来说比较容易。 但是另一方面,它是非常冗长的, 因为需要编写大量的常用的样板代码。 虽然说在Java8中引入了 Lambdas 跟 stream, 情况变得相对来说好了一些, 但是在某一些方面仍然存在一些差异, 比如编写简单的Java对象Pojo,但是现在有了Lombok这个插件,你会发现我们写代码到底可以多轻松。 因为许多常用的方法像 Setter, getter, toString, equal等等 甚至 构造器 都已经帮你完成了,我们所需要做的就只是在对的地方添加上注解标记就好了。
方法如下:
首先我们来看看传统的 Java POJO类 应该来怎么定义:
public class User {
private String name;
private String surname;
private int age;
public User(String name, String surname, int age) {
this.name = name;
this.surname = surname;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return age == user.age
&& Objects.equals(name, user.name)
&& Objects.equals(surname, user.surname);
}
@Override
public int hashCode() {
return Objects.hash(name, surname, age);
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", surname='" + surname + '\'' +
", age=" + age +
'}';
}
}
在这个常规的POJO类中只有三个成员字段, name, surname 和 age。但是它具有常见的POJO类的一切通用元素: getters,** setters, equals, hashCode, 和toString** 方法.
为了完成这个仅仅只有三个成员变量的类,我们竟然写了差不多60行的diamante。 确实,如果你使用IDE的话,IDE确实可以帮你自动生成一些方法的实现,但是在阅读代码的看到这些代码你难道不觉得头疼么。 下面我们通过使用Lombok来简化我们的代码。
首先在项目中添加Lombok的依赖:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> <scope>provided</scope> </dependency>
通常情况下在,如果你使用IDE例如Intellji后者Eclipse,你还需要装上 Lombok的Plugin才能正确使用。 Lombok为成员变量提供了一些基本的注解来确保每一个成员变量都能够自动拥有访问的方法。
@EqualsAndHashCode
@ToString
@AllArgsConstructor
public class User {
@Setter
@Getter
private String name;
@Setter
@Getter
private String surname;
@Setter
@Getter
private int age;
}
正如你所见的,我们使用了五个基本的注解。
@EqualsAndHashCode, @ToString 告诉Lombok来生成 equals, hashCode, 和 toString 方法, 在生成这些方法的时候lombok会使用所有的成员变量。 @AllArgsConstructor会自动创建一个包括所有成员的构造器。 @Getter/@Setter annotations 注解会为每一个标记的成员变量自动生成对应的方法。
现在我们只需要像这个正常使用它就好了
User user = new User("John", "Doe", 32);
user.setAge(30);
user.equals(new User("John", "Doe", 30)); // true
如果你不想将注解用在全部的成员变量上,而是仅仅部分变量上,那么你可以提供一个指定的哪一个成员变量需要自动生成方法的变量。 比如在这里,我们不想让 age 这个成员变量出现在 toString 方法里,我们可以这么做:
@EqualsAndHashCode
@ToString(of = {"name", "surname"})
@AllArgsConstructor
public class User {
@Getter
@Setter
private String name;
@Getter
@Setter
private String surname;
@Getter
@Setter
private int age;
}
我想到这里,这些代码已经比我们一开始要好太多了,但是它任然不够简洁。这里重复了大量的 @Getter 和 @Setter 注解。如果你只是需要在Class中仅暴露几个字段,那么使用它们非常方便,但如果您需要为所有字段生成访问器,则会变得烦人又无聊。为了使代码更加简洁, Lombok永续我们在类级上使用这些注解。如果这些注解放在类名之上,那么lombok会自动为我们生成所有字段的访问方法。
@EqualsAndHashCode
@ToString
@AllArgsConstructor
@Getter
@Setter
public class User {
private String name;
private String surname;
private int age;
}
目前为止我们所做的修改并没有改变类的行为,但是却使我们的类看起来更加的简洁。这就是我们使用Lombok想要达到的效果。
除此之外Lombok还有一个注解叫做 @Builder。 下面我们来看一段这样的代码:
@EqualsAndHashCode
@ToString
@AllArgsConstructor
@Getter
@Setter
@Builder
public class User {
private String name;
private String surname;
private int age;
}
我们给User这个类加了一个@Builder的注解,下面我们如果想实例化这个类,你第一想到的是不是:
User user=new User; user.setxxx(); .... ....
但是现在我们可以利用@Builder注解这样生成实例:
User user = User.builder()
.name("John")
.surname("Doe")
.age(32)
.build();
怎么样,是不是很方便,这样你在生成实例的时候来呢setter方法都省得写了。
其实说了这么说,下面这个注解才是Lombok的精华:
简单的来说所有所有的注解我们都可以使用一个注解完成。 对 他就是@Data 注解。
@Data
@Builder
public class User {
private String name;
private String surname;
private int age;
}
我们在定义类的时候 只需要加一个 @Data 注解,其他的注解我们都不需要在添加就可以达到前面所说的所有功能。 不相信的想伙伴可以试一试
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# spring
# boot
# lombok
# 代码
# SpringBoot 2.x 整合Lombok的方法示例
# IDEA2020.1创建springboot项目(国内脚手架)安装lombok
# SpringBoot配置lombok与logback过程解析
# SpringBoot使用LomBok的示例代码
# Spring Boot中lombok的安装与使用详解
# Spring Boot整合Lombok的方法详解
# 帮你
# 如果你
# 自动生成
# 的是
# 好了
# 写了
# 匈牙利
# 都是
# 几个
# 我就
# 是在
# 在这里
# 是一种
# 放在
# 在这个
# 告诉我
# 你可以
# 才是
# 这就是
# 说了
相关文章:
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
如何将凡科建站内容保存为本地文件?
已有域名和空间,如何快速搭建网站?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
如何用PHP工具快速搭建高效网站?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
微信小程序制作网站有哪些,微信小程序需要做网站吗?
建站之星下载版如何获取与安装?
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
建站之星如何修改网站生成路径?
高端建站三要素:定制模板、企业官网与响应式设计优化
已有域名和空间如何快速搭建网站?
ppt制作免费网站有哪些,ppt模板免费下载网站?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
如何制作网站标识牌,动态网站如何制作(教程)?
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
如何确保FTP站点访问权限与数据传输安全?
建站之星如何助力网站排名飙升?揭秘高效技巧
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
C#如何在一个XML文件中查找并替换文本内容
如何快速查询网站的真实建站时间?
如何选择高效稳定的ISP建站解决方案?
建站之星如何配置系统实现高效建站?
如何在橙子建站中快速调整背景颜色?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
如何高效利用200m空间完成建站?
高防服务器租用指南:配置选择与快速部署攻略
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
如何通过.red域名打造高辨识度品牌网站?
如何快速搭建高效香港服务器网站?
利用JavaScript实现拖拽改变元素大小
如何正确选择百度移动适配建站域名?
已有域名和空间如何搭建网站?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
制作营销网站公司,淘特是干什么用的?
如何通过FTP空间快速搭建安全高效网站?
如何在腾讯云免费申请建站?
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
如何在企业微信快速生成手机电脑官网?
网站制作网站,深圳做网站哪家比较好?
网站制作员失业,怎样查看自己网站的注册者?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何高效生成建站之星成品网站源码?
非常酷的网站设计制作软件,酷培ai教育官方网站?
内部网站制作流程,如何建立公司内部网站?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
*请认真填写需求信息,我们会在24小时内与您取得联系。