SpringBoot优雅编码之:Lombok加持

转载 2018年04月15日 00:41:28

SpringBoot优雅编码之:Lombok加持
hansonwang99 2018-04-09 13:14:38 浏览1278 评论0
string

插件

index

Other

IDEA
摘要: 概述 Lombok 通过提供简单的语法注解形式来帮助简化消除一些必须有但显得很臃肿的 java 代码。典型的是对于 POJO对象的简化(如自动帮我们生成Setter和Getter等),有了Lombok的加持,开发人员可以免去很多重复且臃肿的操作,极大地提高java代码的信噪比,因此我们必须尝试并…

小米游戏本

概述

Lombok 通过提供简单的语法注解形式来帮助简化消除一些必须有但显得很臃肿的 java 代码。典型的是对于 POJO对象的简化(如自动帮我们生成Setter和Getter等),有了Lombok的加持,开发人员可以免去很多重复且臃肿的操作,极大地提高java代码的信噪比,因此我们必须尝试并应用起来!

IntelliJ IDEA上配置

方法一:直接在IDEA界面中配置

首先进入Plugins界面:
进入Plugins界面
这里写图片描述
然后搜索并安装Lombok插件:
安装Lombok插件

这里写图片描述
最后不要忘了开启Annotation Processors的Enable选项:
Enable Annotation Processors
这里写图片描述
上述安装完成以后需要重启IDEA生效!

方法二:手动下载Lombok插件安装

有时由于网络原因,上面方法一这种方式安装失败,因此只能手动下载安装

下载lombok插件:
https://github.com/mplushnikov/lombok-intellij-plugin/releases
Plugins -> Install plugin from disk… 选择下载的zip包安装
选择lombok的zip包来安装
这里写图片描述
重启idea即可
重启IDEA生效

IDE中设置完成以后需要在pom.xml中添加如下所示的lombok依赖才能使用

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.16</version>
</dependency>

Lombok主要注解

@Getter and @Setter / 自动为属性提供 Set和Get 方法 @ToString / 该注解的作用是为类自动生成toString()方法 @EqualsAndHashCode / 为对象字段自动生成hashCode和equals实现 @AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor / 顾名思义,为类自动生成对应参数的constructor @Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog / 自动为类添加对应的log支持 @Data / 自动为所有字段添加@ToString, @EqualsAndHashCode, @Getter,为非final字段添加@Setter,和@RequiredArgsConstructor,本质上相当于几个注解的综合效果 @NonNull / 自动帮助我们避免空指针。作用在方法参数上的注解,用于自动生成空值参数检查 @Cleanup / 自动帮我们调用close()方法。作用在局部变量上,在作用域结束时会自动调用close方法释放资源 下文就Lombok中用的最为频繁的@Data和@Log注解进行代码实战!

@Data注解使用

官网关于@Data注解的解释如下:

All together now: A shortcut for @ToString, @EqualsAndHashCode,
@Getter on all fields, @Setter on all non-final fields, and
@RequiredArgsConstructor!

不难理解,其可以看成是多个Lombok注解的集成,因此使用很方便!

先来创建一个POJO实体UserLombok,普通的写法如下:

public class UserLombok {
  private final String name;
  private int age;
  private double score;
  private String[] tags;

  public UserLombok(String name) {
    this.name = name;
  }

  public String getName() {
    return this.name;
  }

  void setAge(int age) {
    this.age = age;
  }

  public int getAge() {
    return this.age;
  }

  public void setScore(double score) {
    this.score = score;
  }

  public double getScore() {
    return this.score;
  }

  public String[] getTags() {
    return this.tags;
  }

  public void setTags(String[] tags) {
    this.tags = tags;
  }

  @Override public String toString() {
    return "DataExample(" + this.getName() + ", " + this.getAge() + ", " + this.getScore() + ", " + Arrays.deepToString(this.getTags()) + “)”;
  }

  protected boolean canEqual(Object other) {
    return other instanceof DataExample;
  }

  @Override public boolean equals(Object o) {
    if (o == this) return true;
    if (!(o instanceof DataExample)) return false;
    DataExample other = (DataExample) o;
    if (!other.canEqual((Object)this)) return false;
    if (this.getName() == null ? other.getName() != null : !this.getName().equals(other.getName())) return false;
    if (this.getAge() != other.getAge()) return false;
    if (Double.compare(this.getScore(), other.getScore()) != 0) return false;
    if (!Arrays.deepEquals(this.getTags(), other.getTags())) return false;
    return true;
  }

  @Override public int hashCode() {
    final int PRIME = 59;
    int result = 1;
    final long temp1 = Double.doubleToLongBits(this.getScore());
    result = (result*PRIME) + (this.getName() == null ? 43 : this.getName().hashCode());
    result = (result*PRIME) + this.getAge();
    result = (result*PRIME) + (int)(temp1 ^ (temp1 >>> 32));
    result = (result*PRIME) + Arrays.deepHashCode(this.getTags());
    return result;
  }
}

Lombok加持后,写法可简化为:

@Data
public class UserLombok {
    private final String name;
    private int age;
    private double score;
    private String[] tags;
}

在IDEA中使用时,Lombok的注解会自动补全,如下图所示:

Lombok注解自动补全

我们来写POJO的测试代码

public static void main( String[] args ) {
     UserLombok userLombok = new UserLombok("hansonwang99”);
     userLombok.setAge(18);
     String[] array = new String[]{"apple","juice”};
     userLombok.setTags( array );
     userLombok.setScore( 99.0 );
     System.out.println(userLombok);
 }

由下图我们可以看到IDEA依然可以自动为我们补全由Lombok自动生成的代码:

自动生成的代码

结果打印
由于Lombok为我们自动生成了toString方法,因此对象的打印结果如下:

UserLombok(name=hansonwang99, age=18, score=99.0, tags=[apple, juice])

@Log注解实战

在我的文章 Spring Boot日志框架实践 一文中,我们使用Log4j2来作为日志对象,其写法如下:

@RestController
@RequestMapping("/testlogging”)
public class LoggingTestController {

    private final Logger logger = LogManager.getLogger(this.getClass());

    @GetMapping("/hello”)
    public String hello() {
        for(int i=0;i<10_0000;i++){
            logger.info("info execute index method”);
            logger.warn("warn execute index method”);
            logger.error("error execute index method”);

        }

        return "My First SpringBoot Application”;
    }
}

若改用Lombok后,写法变得更加简洁,我们只需要引入对应的@Log注解即可完成log对象的生成:

@RestController
@RequestMapping("/testloggingwithlombok”)
@Log4j2
public class LoggingTestControllerLombok {

    @GetMapping("/hello”)
    public String hello() {
        for(int i=0;i<10_0000;i++){
            log.info("info execute index method”);
            log.warn("warn execute index method”);
            log.error("error execute index method”);

        }

        return "My First SpringBoot Application”;
    }
}

怎么样,是不是一切都是那么地优雅!

原文:SpringBoot优雅编码之:Lombok加持
https://yq.aliyun.com/articles/578285?utm_content=m_45593

SpringBoot

让你快速掌握SpringBoot框架核心知识点!
  • 2018年04月12日 22:12

Spring Boot集成lombok让代码更简洁

Spring Boot项目中使用lombok1.添加lombok依赖 org.projectlombok lombok 1
  • qq_37958578
  • qq_37958578
  • 2017-07-14 10:59:22
  • 1908

eclipse 使用maven 构建springboot +lombok

lombok作用:消除模板代码。 getter、setter、构造器、toString()、equals()便捷的生成比较复杂的代码,例如一个POJO要转化成构建器模式的形式,只需要一个注解。 注...
  • zhouzhiwengang
  • zhouzhiwengang
  • 2017-03-19 10:54:59
  • 1282

Spring Boot 集成 lombok 让代码更简洁

话不多说,先上图:IDEA安装lombok插件 IntelliJ IDEA 定位到 File > Settings > Plugins 点击 Browse repositories… 搜索 Lomb...
  • jyg0723
  • jyg0723
  • 2017-09-13 17:27:26
  • 286

Spring Boot下的lombok安装以及使用简介

引言:Spring Boot是非常高效的开发框架,lombok是一套代码模板解决方案,将极大提升开发的效率,这里介绍给大家使用。1. Lombok  Lombok想要解决了的是在我们实体Bean中大量...
  • blueheart20
  • blueheart20
  • 2016-10-24 11:50:46
  • 11455

SpringBoot-Actuator应用监控以及优雅停机

Actuator是SpringBoot提供的对应用系统的自省和监控的集成功能,可以对应用系统进行配置查看、相关功能统计等。 添加依赖: org.springframework.boot ...
  • Tracycater
  • Tracycater
  • 2017-09-06 14:22:10
  • 908

SpringBoot 实战 之 优雅终止服务

由于 SpringBoot 是一个微服务框架,其生产部署的方式也需要尽可能的简单,与常规的 Web 应用有着一个巨大的不同之处,它可以内嵌一个 Web 容器,如:Tomcat、Jetty等,不再需要将...
  • chinrui
  • chinrui
  • 2017-12-01 11:42:58
  • 2054

Spring Boot lombok安装+使用:idea篇

版本说明 (1)spring boot: 1.5.8; (2)lombok:1.16.20; (3)操作系统:Mac (4)开发工具:idea ultimate 2017.2 一、Lombo...
  • longdan3105
  • longdan3105
  • 2018-01-26 11:07:10
  • 94

springBoot中Logback日志的使用

1、lombok工具的使用1、未使用lombok之前的测试类如下:package com.imooc.sell;import org.junit.Test; import org.junit.runn...
  • qq_28893679
  • qq_28893679
  • 2017-10-24 11:49:50
  • 383

SpringBoot 优雅停服

pom.xml  引用 actuator 监控插件&amp;lt;!-- springboot监控 --&amp;gt; &amp;lt;dependency&amp;gt; &amp;lt;gro...
  • love13135816
  • love13135816
  • 2018-04-13 18:36:11
  • 19
收藏助手
不良信息举报
您举报文章:SpringBoot优雅编码之:Lombok加持
举报原因:
原因补充:

(最多只允许输入30个字)