Skip to content

注解工具(Lombok)

概述

Lombok是一个Java工具,可以通过使用注解的形式,帮助开发人员简化消除一些必须有但显得臃肿的代码。它能够达到的效果就是在源码中不需要写一些通用的方法,但是在编译生成的字节码文件中会帮我们生成这些方法。

快速上手

  1. 添加依赖

    xml
    <dependency>
    	<groupId>org.projectlombok</groupId>
    	<artifactId>lombok</artifactId>
    	<optional>true</optional>
    </dependency>
  2. 使用注解(以注解@Data为例)

    java
    @Data
    public class User {
        private Long id;
        private String name;
        private Integer age;
        private String email;
    }

    上面的代码等价于:

    java
    public class User {
        private Long id;
        private String name;
        private Integer age;
        private String email;
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    
        public User() {
        }
        
        protected boolean canEqual(final Object other) {
            return other instanceof User;
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o) {
                return true;
            }
            if (o == null || getClass() != o.getClass()) {
                return false;
            }
            User user = (User) o;
            return Objects.equals(id, user.id) &&
                    Objects.equals(name, user.name) &&
                    Objects.equals(age, user.age) &&
                    Objects.equals(email, user.email);
        }
    
        @Override
        public int hashCode() {
            return Objects.hash(id, name, age, email);
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", age=" + age +
                    ", email='" + email + '\'' +
                    '}';
        }
    }

Lombok常用注解说明

  • @Data 注解在类上,提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
  • @Setter注解在属性上;为属性提供 setting 方法
  • @Getter注解在属性上;为属性提供 getting 方法
  • @Slf4j注解在类上;会根据实际使用的日志框架生成log日志对象
  • @NoArgsConstructor注解在类上;为类提供一个无参的构造方法
  • @AllArgsConstructor注解在类上;为类提供一个全参的构造方法
  • @Cleanup可以关闭流
  • @Builder被注解的类加个构造者模式
  • @Synchronized加个同步锁
  • @SneakyThrows等同于try/catch 捕获异常
  • @NonNull如果给参数加个这个注解 参数为null会抛出空指针异常
  • @Value注解和@Data类似,区别在于它会把所有成员变量默认定义为private final修饰,并且不会生成set方法

参考