全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Spring Boot利用Lombok减少Java中样板代码的方法示例

前言

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的方法详解  # 帮你  # 如果你  # 自动生成  # 的是  # 好了  # 写了  # 匈牙利  # 都是  # 几个  # 我就  # 是在  # 在这里  # 是一种  # 放在  # 在这个  # 告诉我  # 你可以  # 才是  # 这就是  # 说了 


相关文章: 寿县云建站:智能SEO优化与多行业模板快速上线指南  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  ,在苏州找工作,上哪个网站比较好?  建站之星如何实现网站加密操作?  如何使用Golang table-driven基准测试_多组数据测量函数效率  如何通过万网虚拟主机快速搭建网站?  如何解决VPS建站LNMP环境配置常见问题?  宝塔面板创建网站无法访问?如何快速排查修复?  招商网站制作流程,网站招商广告语?  ,柠檬视频怎样兑换vip?  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  如何在阿里云服务器自主搭建网站?  想学网站制作怎么学,建立一个网站要花费多少?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  湖州网站制作公司有哪些,浙江中蓝新能源公司官网?  济南专业网站制作公司,济南信息工程学校怎么样?  公司网站的制作公司,企业网站制作基本流程有哪些?  建站之星如何助力企业快速打造五合一网站?  如何在万网自助建站平台快速创建网站?  开心动漫网站制作软件下载,十分开心动画为何停播?  如何选择高性价比服务器搭建个人网站?  如何快速使用云服务器搭建个人网站?  建站上市公司网站建设方案与SEO优化服务定制指南  如何快速生成专业多端适配建站电话?  制作网站的基本流程,设计网站的软件是什么?  广州建站公司哪家好?十大优质服务商推荐  Swift开发中switch语句值绑定模式  ,石家庄四十八中学官网?  如何安全更换建站之星模板并保留数据?  盘锦网站制作公司,盘锦大洼有多少5G网站?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  建站之星安装后如何配置SEO及设计样式?  香港网站服务器数量如何影响SEO优化效果?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  南平网站制作公司,2025年南平市事业单位报名时间?  如何在阿里云虚拟服务器快速搭建网站?  建站之星代理如何优化在线客服效率?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  如何选择高效便捷的WAP商城建站系统?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  建站之星价格显示格式升级,你的预算足够吗?  七夕网站制作视频,七夕大促活动怎么报名?  建站主机选择指南:服务器配置与SEO优化实战技巧  建站之星在线客服如何快速接入解答?  已有域名和空间如何快速搭建网站?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  香港服务器网站卡顿?如何解决网络延迟与负载问题? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。