概述

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

注: 本文首发于 My 公众号 CodeSheep ,可 长按扫描 下面的 小心心 来订阅 ↓ ↓ ↓


IntelliJ IDEA上配置

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

  • 首先进入Plugins界面:

  • 然后搜索并安装Lombok插件:

  • 最后不要忘了开启Annotation Processors的Enable选项:

上述安装完成以后需要重启IDEA生效!


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

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

  • 下载lombok插件:

https://github.com/mplushniko...

  • Plugins -> Install plugin from disk... 选择下载的zip包安装

  • 重启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的注解会自动补全,如下图所示:

  • 我们来写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”;}
}

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


后记

  • 作者更多的原创文章在此,欢迎观赏
  • My Personal Blog

作者更多的SpringBt实践文章在此:

  • Spring Boot应用监控实战
  • SpringBoot应用部署于外置Tomcat容器
  • ElasticSearch搜索引擎在SpringBt中的实践
  • 初探Kotlin+SpringBoot联合编程
  • Spring Boot日志框架实践
  • SpringBoot优雅编码之:Lombok加持

如果有兴趣,也可以抽点时间看看作者一些关于容器化、微服务化方面的文章:

  • 利用K8S技术栈打造个人私有云 连载文章
  • 从一份配置清单详解Nginx服务器配置
  • Docker容器可视化监控中心搭建
  • 利用ELK搭建Docker容器化应用日志中心
  • RPC框架实践之:Apache Thrift
  • RPC框架实践之:Google gRPC
  • 微服务调用链追踪中心搭建
  • Docker容器跨主机通信
  • Docker Swarm集群初探
  • 高效编写Dockerfile的几条准则


SpringBoot优雅编码之:Lombok加持相关推荐

  1. SpringBoot - 优雅的实现【业务校验】高级进阶

    文章目录 Pre 需求 实现三部曲 实体类 Step1 搞两个自定义注解 Step2 搞自定义校验器 Step3 搞验证 小结 源码 Pre SpringBoot - 优雅的实现[参数校验]高级进阶 ...

  2. SpringBoot - 优雅的实现【自定义参数校验】高级进阶

    文章目录 Pre 概述 三部曲 Step1 搞自定义注解 Step2 搞校验逻辑 Step3 使用 Step4 验证 附 int 类型的判断 源码 Pre SpringBoot - 优雅的实现[参数校 ...

  3. SpringBoot - 优雅的实现【参数校验】高级进阶

    文章目录 Pre 概述 参数校验三部曲 Step1 搞依赖 Step2 搞参数校验的实体类 常用的校验注解 Step3 开始验证 存在的问题 使用 统一格式 + 全局异常Handler 优化 源码 P ...

  4. SpringBoot - 优雅的实现【参数分组校验】高级进阶

    文章目录 Pre 需求 实现三部曲 Step1 定义分组接口 Step2 给参数分配分组 Step3 指定分组 Step4 验证 源码 Pre SpringBoot - 优雅的实现[参数校验]高级进阶 ...

  5. SpringBoot 优雅地对接口进行数据加解密

    我是 ABin-阿斌:写一生代码,创一世佳话,筑一览芳华.如果小伙伴们觉得不错就一键三连吧~ 声明: 原作者:掘金:https://juejin.cn/user/3650034336532824 原文 ...

  6. SpringBoot优雅整合RocketMQ

    SpringBoot优雅整合RocketMQ 本篇文章默认你已经有RocketMQ的基础: Producer启动过程,消息发送过程 Consumer启动过程,消息拉取消息消费过程 NameServer ...

  7. SpringBoot 优雅停机

    目录 linux常用的 kill 指令 springboot 优雅停机 /actuator/shutdown 端点 不停机更新方案 linux常用的 kill 指令 kill -15:kill指令默认 ...

  8. SpringBoot优雅退出

    目录 概念 原理 SpringBoot实现源码分析 查看源码我们发现会调用 Lifecycle 的stop()方法  或者调用 SmartLifecycle的stop(Runnable var1)方法 ...

  9. php阶梯电费,如何更优雅编码、更优算法 | 阶梯式电费算法 | 非常感谢、请指教~...

    如何更优雅编码.更优算法 | 阶梯式电费算法 | 非常感谢.请指教~ 电费的阶梯式算法 ?笑:-D~ 倒序进行中,如何更加优雅.使用更少的代码,甚至更优的算法呢? 常常会见到这种场景: 举个栗子,深圳 ...

最新文章

  1. python代码安全扫描工具
  2. Permission denied (publickey). fatal: Could not read from remote repository.
  3. Note for Consulting Handbook5
  4. 他从零开始学Python,25岁拥有480000粉丝:成功就靠这3点!
  5. twitter批量取消关注_如何在Twitter上取消阻止“潜在敏感内容”
  6. raid配置ssd为缓存_超融合硬件选配推荐指南 | 第三期:SSD 与 HDD
  7. 160 - 14 bjanes.1
  8. 边缘设备上的实时AI人员检测:使用预先训练的SSD模型检测人员
  9. ADS创建自己的Project模板
  10. 串口控件MSCOMM的注册方法(使用MSCOMM串口控件程序的运行问题)
  11. linuxpv操作实验_操作系统实验三:Linux进程管理及其扩展
  12. matlab经典例题及答案,matLAB经典例题及答案.pdf
  13. KETTLE4个工作中有用的复杂实例--1、数据定时自动(自动抽取)同步作业
  14. 浪潮服务器u盘安装系统_浪潮服务器U盘安装系统无法识别到电脑硬题的解决
  15. Nexus私服(三)
  16. 2021年危险化学品经营单位安全管理人员复审考试及危险化学品经营单位安全管理人员模拟考试
  17. 物联网设备数据流转之前后端数据交互与展示:Layout, Cascader, Card, Dialog, Table, Pagination
  18. Android IPC机制之IPC概念、Android 多进程和相关基础知识
  19. [Python] 错误“IndentationError: unindent does not match any outer indentation level”是什么意思?...
  20. 环保行业舆情管理制度

热门文章

  1. java常用容器(集合)的总结
  2. squid 安装、配置、优化
  3. C#实现Windows服务的制作安装和删除
  4. 有道概率题:一个有趣的抛硬币问题
  5. iOS主线程耗时检测方案
  6. 使用putty上传文件
  7. 红帽喊话开发者:我们将支持 OpenJDK 8 到2023年
  8. JAVA就业指导(转)
  9. iOS导航栏标题错乱的解决方法
  10. 工作后越来越觉得,丢什么也不能丢账号!