目录
以前的Java项目中,充斥着太多不友好的代码:POJO的getter/setter/toString/构造方法;打印日志;I/O流的关闭操作等等,这些代码既没有技术含量,又影响着代码的美观,Lombok应运而生。
LomBok可以通过注解,帮助开发人员消除JAVA中尤其是POJO类中的冗长代码。


如果IDEA版本在2020.3以上,不需要安装Lombok插件。如果IDEA版本在2020.3以下,需要安装Lombok插件,安装方法如下:

Lombok依赖
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- <version>1.18.22version>
- <scope>providedscope>
- dependency>
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- <optional>trueoptional>
- dependency>
作用:为类中的属性提供setter/getter方法
位置:类上方或属性上方,在属性上方则为属性生成setter/getter方法,
在类上方表示给该类下的所有属性生成setter/getter方法
属性:设置setter和getter访问权限
- //给类下的所有属性添加Setter/Getter
- @Setter
- @Getter
- public class User{
- //给id属性添加Setter
- @Setter
- private Integer id;
- //给username的setter方法设置私有权限
- @Setter(AccessLevel.PRIVATE)
- private String username;
- //取消password的Getter方法
- @Getter(AccessLevel.NONE)
- private String password;
- private static int age;
- private final String address=null;
- }

注:
在IDEA中,按住Alt+7可以查看Lombok生成的代码
作用:生成toString方法,默认情况下它会按顺序打印类名称以及每个字段。
位置:类上方
属性:exclude:取消某一个或多个变量在toString方法中的显示
编写pojo类
- @Getter
- @Setter
- @ToString
- public class User1 {
- private Integer id;
- private String name;
- private String password;
- }
编写测试类
- public class Test1 {
- public static void main(String[] args) {
- User1 user1 = new User1();
- user1.setId(1);
- user1.setName("zhangsan");
- user1.setPassword("123456");
-
- System.out.println(user1);
- }
- }
运行测试类

判断两个对象是否相等
在Java中,调用equals()可以判断两个对象是否相等。如果类不重写该方法,则判断两个引用是否指向同一个对象。
如何重写equals():
而在Set中判断对象是否重复,在调用equals()之前,需要先调用hashCode()计算hash值。所以判断对象相等需要重写equals()、canEqual()、hashCode()三个方法。
@EqualsAndHashCode
作用:生成equals和hashCode、canEqual方法。用于比较两个类对象是否相同。
位置:类上方
属性:
编写pojo类
- @Getter
- @Setter
- @EqualsAndHashCode
- public class User2 {
- private Integer id;
- private String name;
- private String password;
- }
编写测试类
- public class Test2 {
- public static void main(String[] args) {
- User2 user1 = new User2();
- user1.setId(1);
- user1.setName("zhangsan");
- user1.setPassword("123456");
-
- User2 user2 = new User2();
- user2.setId(1);
- user2.setName("zhangsan");
- user2.setPassword("123456");
-
- System.out.println(user1.equals(user2));
- }
- }
运行测试类

作用:用于方法参数前,表示调用该方法时参数不能为null;
用于属性上方,表示为该属性赋值时值不能为null。
位置:方法参数前或属性上方。
@NoArgsConstructor
作用:生成无参构造方法
位置:类上方
@RequiredArgsConstructor
作用:生成包含final和@NonNull修饰的属性的构造方法
位置:类上方
@AllArgsConstructor
作用:生成全参的构造方法
位置:类上方
@Data
作用:相当于同时添加@Setter、@Getter、@ToString、@EqualsAndHashCode、 @RequiredArgsConstructor五个注解
位置:类上方
@Builder
作用:提供链式风格创建对象
位置:类上方
编写pojo类
- @Data
- @Builder
- public class User3 {
- private Integer id;
- private String name;
- private String password;
- }
编写测试类
- public class Test3 {
- public static void main(String[] args) {
- User3 user3 = User3.builder().id(1).name("zhangsan").password("987654").build();
- System.out.println(user3);
- }
- }
启动测试类

作用:在类中生成日志对象,在方法中可以直接使用
位置:类上方
- @Data
-
- @Log4j2
-
- public class User7{
-
- private Integeri d;
-
- private String username;
-
- private String password;
-
-
-
- public void sleep(){
-
- log.info("调用睡觉方法");
-
- System.out.println("睡觉");
-
- }
-
- }
注:针对不同的日志实现产品,有不同的日志注解,使用表示使用Java自带的日志功能,除了,还可以使用、、等注解,来使用不同的日志产品。
@Log @Log @Log4j @Log4j2 @Slf4j
@Cleanup
作用:自动关闭资源,如IO流对象。
位置:代码前方
@SneakyThrows
作用:对方法中异常进行捕捉并抛出
位置:方法上方
- public class Test4 {
-
- @SneakyThrows
- public static void main(String[] args) {
- @Cleanup FileInputStream fis = new FileInputStream("");
- }
- }