![3c4d81db851f8c611584dc5160ecace6.png](https://img-blog.csdnimg.cn/img_convert/3c4d81db851f8c611584dc5160ecace6.png)
Lombok, 一个Java开发必备效率工具,可以大大避免编写一些常用方法(get/set, hashcode等),简化开发。虽然现在IDE很多都可以通过快捷键生成POJO的一些方法了,但是如果该POJO字段发生变动后,还是需要程序员再次手动重新生成相关方法。而Lombok只需要使用注解即可,且是在代码编译期间将注解替换为相应的代码,而非通过反射。同时会使得源码文件更简洁
配置
IDEA环境下的的Lombok的配置:
1. 首先在Maven中添加Lombok包
<dependency>
2. 在IDEA的Plugins Marketplace 中搜索安装 IntelliJ Lombok plugin 插件
POJO 方法
POJO类的很多方法get、set、equals、canEquals、hashCode、toString、Constructor 都可以通过Lombok的相关注解实现
@Data 注解
放置在类上,为该类的所有属性添加get、set方法,为该类添加equals、canEquals、hashCode、toString方法。非常适用于POJO类。
示例源码如下:
@Data
编译后class文件如下,可以看到提供了上述提到的所有方法,并且源码依然很简洁
![a1be9f7b85195ccf38f763915197a608.png](https://img-blog.csdnimg.cn/img_convert/a1be9f7b85195ccf38f763915197a608.png)
Note:
如果无构造器方法,Java会提供一个默认的无参构造器。所以class文件中的那个无参构造器可不是Lombok的功劳哦~
@Getter, @Setter 注解
- 放置在属性上,为该属性添加Get/Set方法
示例源码如下:
class
编译后class文件如下,可以看到字段上添加了相应的方法
![79e14b94407c5324ea2c37741c2e55dd.png](https://img-blog.csdnimg.cn/img_convert/79e14b94407c5324ea2c37741c2e55dd.png)
- 放置在类上,则为该类的所有属性添加Get/Set方法
@EqualsAndHashCode 注解
放置在类上,为该类添加equals、canEqual、hashCode方法
示例源码如下:
@EqualsAndHashCode
编译后class文件如下,该类添加了equals、canEqual、hashCode方法
![53792b455a78aaee6d69bbdc832af240.png](https://img-blog.csdnimg.cn/img_convert/53792b455a78aaee6d69bbdc832af240.png)
@ToString 注解
放置在类上,为该类添加toString方法
示例源码如下:
@ToString
编译后class文件如下,该类添加了toString方法
![153f6564d067bbe68693cf1bbe56ef0d.png](https://img-blog.csdnimg.cn/img_convert/153f6564d067bbe68693cf1bbe56ef0d.png)
构造器: @AllArgsConstructor 注解
放置在类上,为该类添加一个全参构造器。需要注意的是:由于此时已经有构造器了,Java不再提供无参构造器
示例源码如下:
@AllArgsConstructor
编译后class文件如下,该类添加了一个全参构造器
![250f6aa758df63347b8ebe58195eefa2.png](https://img-blog.csdnimg.cn/img_convert/250f6aa758df63347b8ebe58195eefa2.png)
构造器: @NoArgsConstructor 注解
放置在类上,为该类添加一个无参构造器
示例源码如下:
@NoArgsConstructor
编译后class文件如下,该类添加了一个无参构造器
![ac59e2b254929e53da89ff46b333c512.png](https://img-blog.csdnimg.cn/img_convert/ac59e2b254929e53da89ff46b333c512.png)
@NonNull
放置在属性上,将对该属性进行非空检查,如果为空(null),将会抛出NullPointerException;同时为该类添加一个由所有@NonNull属性组成的有参构造器。需要注意的是:由于此时已经有构造器了,Java不再提供无参构造器
示例代码如下:
@Data
编译后class文件如下,该类中对id属性的操作均进行了非空检查,添加了一个所有@NonNull属性组成(id属性)的有参构造器
![efb67a26fb9b11aa223abb9484923459.png](https://img-blog.csdnimg.cn/img_convert/efb67a26fb9b11aa223abb9484923459.png)
@RequiredArgsConstructor 注解 简化依赖注入
通常我们在实现Spring依赖注入,常常是在需要注入的属性添加@Autowired注解实现(如下所示)。但如果一个类下有很多属性需要注入时,@Autowired就要写一堆了……
...
这里可以使用这里@RequiredArgsConstructor注解来简化依赖注入操作:首先需要将该注解放在类上,然后在 需要注入的属性前添加final(用法1) 或 在需要注入的属性上添加注解@NonNull(用法2)
对上述示例的改进写法如下:
...
用法1 和 用法2 虽然效果一样,但是很明显用法1更常用……
log对象
@Log4j
放置在类上,为该类添加一个属性名为log的Log4J日志对象
示例源码如下:
@Log4j
编译后的class文件如下,该类添加了一个属性名为log的Log4J日志对象
![26343babd46fecc18f9e1909aabb0631.png](https://img-blog.csdnimg.cn/img_convert/26343babd46fecc18f9e1909aabb0631.png)
@Slf4j
放置在类上,为该类添加一个属性名为log的SLF4J日志对象
示例源码如下:
import
编译后的class文件如下,该类添加了一个属性名为log的SLF4J日志对象
![0eb5193c218de0275559503b94547423.png](https://img-blog.csdnimg.cn/img_convert/0eb5193c218de0275559503b94547423.png)