您的位置:

Lombok常用注解详解

一、Lombok常用注解及含义

Lombok是一款Java库,可以通过注解的方式来减少一些模板代码,提高开发效率和代码的可读性。Lombok常用注解如下:

  • @Getter/@Setter: 自动生成JavaBean的getter/setter方法。
  • @ToString: 自动生成ToString方法。
  • @EqualsAndHashCode: 自动生成equals和hashCode方法。
  • @NoArgsConstructor/@RequiredArgsConstructor/@AllArgsConstructor: 自动生成无参/指定参数/所有参数的构造函数。
  • @Data: 包含@Getter,@Setter,@ToString,@EqualsAndHashCode和@RequiredArgsConstructor,常用于值对象。
  • @Builder: 链式调用生成器模式,简化对象创建过程。
    @Data
    public class User {
        private Long id;
        private String name;
        private String email;
    }

上面的代码使用@Data注解,等同于同时使用了@Getter、@Setter、@ToString、@EqualsAndHashCode和@RequiredArgsConstructor注解。

二、Lombok异常注解

Lombok还提供了一些异常处理相关的注解,如下:

  • @SneakyThrows: 在方法内部自动捕获并忽略异常,等效于try-catch。使用时,需要保证被标注方法的签名抛出声明的异常。
  • @Getter(lazy=true): 延迟加载,只有在第一次使用时才进行初始化。如果在初始化时抛出异常,则后续调用将抛出NullPointerException。
  • @NonNull: 用在参数上,可以生成参数非空判断,如果参数为空,则抛出NullPointerException。
    @SneakyThrows(ReflectiveOperationException.class)
    public void test() {
        //some reflection code
    }
    
    public class User {
        @Getter(lazy=true)
        private final String fullName = computeFullName();
        private String computeFullName() {
            //some logic to compute fullName
        }
    }
    
    public void doSomething(@NonNull String arg) {
        //some logic
    }

三、Lombok注解的默认值

有些Lombok注解可以指定一些默认值,如下:

  • @Builder: 可以设置builder名称。
  • @Value: 默认final、@ToString、@EqualsAndHashCode、@AllArgsConstructor、@FieldDefaults。
  • @NoArgsConstructor/@AllArgsConstructor: 可以指定访问级别。
    @Builder(builderMethodName="myBuilder")
    public class User {
        private Long id;
        private String name;
        private String email;
    }
    
    @Value(staticConstructor="of")
    public class Address {
        String city;
        String street;
        int number;
    }
    
    @NoArgsConstructor(access=AccessLevel.PROTECTED) //设置访问级别为protected
    public class Person {
        private Long id;
        private String name;
    }

四、Lombok注解启用

在使用Lombok时,需要在编译器中安装Lombok插件,并在项目中引入Lombok库。同时,需要在项目中添加如下依赖项:

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${org.projectlombok-version}</version>
        <scope>provided</scope>
    </dependency>

五、Lombok builder注解使用

使用Lombok builder注解可以轻松实现Builder模式,可以方便地创建对象,在对象的属性比较多时使用较为方便。

    User user = User.builder()
        .id(1L)
        .name("Lily")
        .email("lily@example.com")
        .build();

六、Lombok怎么用

在开发过程中,如果使用了Lombok注解,可以通过以下步骤来进行验证:

  • 安装Lombok插件
  • 在项目中引入Lombok库
  • 在代码中使用Lombok注解
  • 编译并运行项目

七、Lombok的data注解

使用Lombok的@Data注解可以让JavaBean类的定义更简单,但需要注意的是,当属性较多时,可能会出现无限递归的问题。此时,可以通过对不需要的字段使用@ToString.Exclude和@EqualsAndHashCode.Exclude来排除该字段。

    @Data
    public class User {
        private Long id;
        private String name;
        @ToString.Exclude
        private String email;
    }

八、Lombok自定义注解

使用Lombok提供的注解可以快速地生成简洁的Java代码,在实际开发过程中,如果需要使用自定义的注解,可以通过定义注解,并在代码中使用该注解来实现。

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    public @interface LogExecutionTime {
    }