如何使用Lombok来优雅的编码-阿里云开发者社区

开发者社区> jackcooper2015> 正文

如何使用Lombok来优雅的编码

简介: 前言 Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注解实现这一目的。
+关注继续查看

前言


Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注解实现这一目的。

安装Lombok


打开 IDEA 的 Settings 面板,并选择 Plugins 选项,然后点击 “Browse repositories”

在输入框输入”lombok”,得到搜索结果,点击安装,然后安装提示重启 IDEA,安装成功;


img_fad1ebd1ea58764ad10d7ebe5521d314.png
image.png

引入依赖

在自己的项目里添加 lombok 的编译支持,在 pom 文件里面添加 dependency

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.18</version>
    <scope>provided</scope>
</dependency>

注解简述

  • @Data = get + set + equal + canEqual + hashCode + toString
  • @Setter
  • @Getter
  • @Slf4j 注解在 类 上;为类提供一个 属性名为 log 的日志对象,提供默认构造方法。
  • @AllArgsConstructor 注解在 类 上;为类提供一个全参的构造方法
  • @NoArgsConstructor 注解在 类 上;为类提供一个无参的构造方法。
  • @EqualsAndHashCode 注解在 类 上, 可以生成 equals、canEqual、hashCode 方法。
  • @NonNull 注解在 属性 上,会自动产生一个关于此参数的非空检查,如果参数为空,则抛出一个空指针异常
  • @Cleanup 这个注解用在 变量 前面,可以保证此变量代表的资源会被自动关闭
  • @ToString 这个注解用在 类 上,可以生成所有参数的 toString 方法,还会生成默认的构造方法
  • @RequiredArgsConstructor 这个注解用在 类 上,使用类中所有带有 @NonNull 注解的或者带有 final 修饰的成员变量生成对应的构造方法。
  • @Value 这个注解用在 类 上,会生成含所有参数的构造方法,get 方法,此外还提供了equals、hashCode、toString 方法。
  • @SneakyThrows 这个注解用在 方法 上,可以将方法中的代码用 try-catch 语句包裹起来,捕获异常并在 catch 中用 Lombok.sneakyThrow(e) 把异常抛出,可以使用 @SneakyThrows(Exception.class) 的形式指定抛出哪种异常
  • @Synchronized 这个注解用在 类方法 或者 实例方法 上,效果和 synchronized 关键字相同

注解详解

@Data

注解在 上;提供类所有属性的 get 和 set 方法,此外还提供了equals、canEqual、hashCode、toString 方法。

img_17a82b76c065f1ce8eb7bec223d3ae8d.png
mark

@Setter

注解在 属性 上;为单个属性提供 set 方法; 注解在 上,为该类所有的属性提供 set 方法, 都提供默认构造方法。

img_57fdbdd3824cb1a90b6f4d2dd2d6d7d5.png
mark
img_5f1cd2cae085ac129473a2230c19f714.png
mark

@Getter

注解在 属性 上;为单个属性提供 get 方法; 注解在 上,为该类所有的属性提供 get 方法,都提供默认构造方法。

img_ad157f5bceba0e915351b8cf1c85d30e.png
mark
img_3da82857b2cf4ef745d830898f9fef53.png
mark

@Slf4j

注解在 上;为类提供一个 属性名为 log 的日志对象,提供默认构造方法。

//类上面注解了,直接调用 log 即可:
log.info(xxxx);

@AllArgsConstructor

注解在 上;为类提供一个全参的构造方法,加了这个注解后,类中不提供默认构造方法了。

img_f98ce801497014ad64cadbc964b673e7.png
mark

@NoArgsConstructor

注解在 上;为类提供一个无参的构造方法。

img_4ac23f91f1544e19001fbda43f4351ae.png
mark

@EqualsAndHashCode

注解在 上, 可以生成 equals、canEqual、hashCode 方法。

img_0b261af6776ee318eccd4e03c623ea81.png
mark

@NonNull

注解在 属性 上,会自动产生一个关于此参数的非空检查,如果参数为空,则抛出一个空指针异常,也会有一个默认的无参构造方法。

img_b4f559200505210d002f8f500006d9a0.png
mark

@Cleanup

这个注解用在 变量 前面,可以保证此变量代表的资源会被自动关闭,默认是调用资源的 close() 方法,如果该资源有其它关闭方法,可使用 @Cleanup(“methodName”) 来指定要调用的方法,也会生成默认的构造方法

img_508beb722371e1571b30339adfbc439e.png
mark

@ToString

这个注解用在 上,可以生成所有参数的 toString 方法,还会生成默认的构造方法。

img_89c5559467156d0b45a2190fd528961e.png
mark

@RequiredArgsConstructor

它们都有三个参数可以设置

1、String staticName() default "";

如果设置了它,将原来的构造方法的访问修饰符将会变成 私有的,而外添加一个静态构造方法,参数相同,名字是设置的字符串的名字,访问修饰符为公有的。

2、AnyAnnotation[] onConstructor() default {};
在构造方法上添加注解。使用方法@RequiredArgsConstructor(onConstructor=@__({@AnnotationsGoHere}))}

例如我们在 Spring 项目中需要注入多个值,写很多个 @Autowired 很麻烦,就可以使用这种方式:

@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class UserServiceImpl implements IUserService {
    private final IUserRepository userRepository;
    private final IOrderRepository orderRepository;
    ………………

3、AccessLevel access() default lombok.AccessLevel.PUBLIC;
构造函数访问修饰符;

@Value

这个注解用在 上,会生成含所有参数的构造方法,get 方法,此外还提供了equals、hashCode、toString 方法。

img_fa5ad822893da18b395bbd86df07d8fa.png
mark

@SneakyThrows

这个注解用在 方法 上,可以将方法中的代码用 try-catch 语句包裹起来,捕获异常并在 catch 中用 Lombok.sneakyThrow(e) 把异常抛出,可以使用 @SneakyThrows(Exception.class) 的形式指定抛出哪种异常,也会生成默认的构造方法。

img_b1b4993614faa9ef7fc25ba92a56c104.png
mark

@Synchronized

这个注解用在 类方法 或者 实例方法 上,效果和 synchronized 关键字相同,区别在于锁对象不同,对于类方法和实例方法,synchronized 关键字的锁对象分别是类的 class 对象和 this 对象,而 @Synchronized 的锁对象分别是 私有静态 final 对象 lock 和 私有 final 对象 lock,当然,也可以自己指定锁对象,此外也提供默认的构造方法。

img_8f6a9943505dfa18d965011a00cd5a5a.png
mark

总结

本文主要站在巨人的肩上,文章内容来源一下三篇文章。本文主要提取了三篇文章中的优点整合而成。


文章参考:

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用node.js获取图片的base64编码
把百度的logo保存到桌面进行测试,得到的编码为: R0lGODlhdQAmAKIAAOYyL+rU4llg6Jmd8e92dCky4eEGAv///yH5BAAAAAAALAAAAAB1ACYAAAP/eLrc/jC2IEoZMATJu/9gyFVWIUyksIls677LUJbrEcxW...
648 0
Netbeans源代码编辑技巧——使用代码补全和代码生成
原文 Netbeans源代码编辑技巧——使用代码补全和代码生成 使用代码补全生成代码 一般来说,代码补全对于自动填充缺失的代码是有帮助的,例如标识符和关键字。截至 NetBeans IDE 6.0,您现在甚至可以用代码补全来生成整个方法。
866 0
DES安全编码组件
  DES安全编码组件   支持 DES、DESede(TripleDES,就是3DES)、AES、Blowfish、RC2、RC4(ARCFOUR)   DES           key size must be equal to 56   DESede(TripleDES) key size must be equal to 112 or 168   AES      
990 0
新型可扩展的数据保护方式——擦除编码
一、概述   在之前存储系统中,一般都采用RAID技术来对数据进行保护,一旦阵列中某块硬盘损坏,可通过RAID技术所形成的镜像来对丢失数据进行恢复。但随着海量数据问题的出现,RAID越来越难发挥其作用。
1116 0
大神手把手教你:(Python)序列数据的One Hot编码
不懂One Hot编码?让大神手把手教你(文中代码可以直接运行),用小例子清晰明了的带你进入One hot 编码!
4803 0
使用GTMBase64编码解码字符串
使用GTMBase64编码解码字符串 说明:BASE64不是用来加密的。你看看经过BASE64编码后的字符串,全部都是由标准键盘上面的常规字符组成,这样编码后的字符串在网关之间传递不会产生UNICODE字符串不能识别或者丢失的现象。
842 0
《Java编码指南:编写安全可靠程序的75条建议(英文版)》—— 第6章 使用字符串来交流 6.1 在字符串中存储文本
Java程序将字符串作为与用户交流的主要方式。字符串是一组文本,可以包含字母、数字、标点符号及其他字符。本章将介绍如何在Java程序中使用字符串。
1136 0
用二进制来编码字符串&quot;adceadaa&quot;,需要能够相据编码,解码回原来的字符串,则至少需要二进制字符的长度是?
利用哈夫曼编码,字符出现的频率越大,则使用越短的二进制进行编码,构建最优二叉树。
710 0
+关注
jackcooper2015
用心做人,专心做事
52
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载