开发者社区> 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

总结

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


文章参考:

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

相关文章
使用Lombok优雅编码
``Lombok``对于``Java偷懒开发者``来说应该是比较中意的,恰恰笔者就是一个喜欢在小细节上偷懒来提高开发效率的人。所以在技术框架的海洋里寻找了很久才在``GitHub``开源平台上找到,而在这之前国外很多程序猿一直使用该框架了,``Lombok``框架提供了很多编码遍历,但是也降低了代码的阅读力。下面我们看看在Idea开发工具中该怎么使用``Lombok``?
48 0
第32篇:学习 Java 中的注解(参照官方教程)
📄 注解(Annotation)也被称为元数据(Metadata),用于解释包、类、方法、属性、构造器、局部变量等数据的信息 📄 和注释一样,注解不影响程序的逻辑。当注解可以被编译或运行(相当于嵌入在代码中的补充信息) 📄 在 JavaSE 中,注解的作用非常简单(例如:标记过时的功能、忽略警告等) 📄 在 JavaEE 中,注解非常非常得重要。在 JavaEE 中,注解占据重要地位(可用于配置应用程序的任何切面,代替 Java EE 旧版中所遗留的繁冗代码和 XML 配置等) 📄 软件工具可以通过处理注解信息生成 Java 代码、生成 XML 文件
79 0
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(一)
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(一)
149 0
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(二)
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(二)
125 0
Java 效率编码 必备插件 Lombok 让代码更优雅
Java 效率编码 必备插件 Lombok 让代码更优雅
79 0
一个超神级框架​——Hutool工具类​应有尽有!
目录 前言 功能 Convert DateUtil StrUtil ClassPathResource ReflectUtil NumberUtil BeanUtil CollUtil MapUtil AnnotationUtil SecureUtil CaptchaUtil 其他工具类
526 0
10hutool实战:TemporalAccessorUtil{TemporalAccessor} 工具类封装
10hutool实战:TemporalAccessorUtil{TemporalAccessor} 工具类封装
141 0
Lombok简述、引入、基本使用、常用注解
Lombok的使用可大大提高开发效率,优化代码结构
431 0
Spring 5 中文解析数据存储篇-编程式事物管理
本章节主要描述:Spring 5 中文解析数据存储篇-编程式事物管理。
566 0
+关注
jackcooper2015
用心做人,专心做事
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载