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

开发者社区> 开发与运维> 正文

如何使用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

总结

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


文章参考:

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

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章