lombook插件使用

前言

方便程序员开发不用写 set get toString 无参有参(开发工具生成也很快嘛),使 pojo看起来简介,美观,程序员只需通过对应的注解即可,程序可以在编译源码的时候自动生成对应的方法
官网地址 https://projectlombok.org/

Idea添加 Lombok插件

  • IDEA中添加Lombok插件, File -> Setting -> Plugins 搜索Lombok Plugin, 点击install,安装完成后重启IDEA。
  • lombook插件使用

使用

  • 导入 jar 包(官网直接下载)
  • maven 方式
    <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${version}</version>
    </dependency>
    
    

常用注解

@Getter and @Setter

  • 可以作用在类上和属性上,放在类上,会对所有的非静态(non-static)属性生成Getter/Setter方法,放在属性上,会对该属性生成Getter/Setter方法。并可以指定Getter/Setter方法的访问级别。

@ToString

  • 生成toString方法,默认情况下,会输出类名、所有属性,属性会按照顺序输出,以逗号分割。

@EqualsAndHashCode

  • @EqualsAndHashCode 会创建包含所有成员变量的 equals 和 hashCode 方法。 exclude选项可用于通知 Lombok排除某些成员变量。

@AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor

  • 全参构造器、部分参数构造器、无参构造器,当我们需要重载多个构造器的时候,Lombok就无能为力了。

日志

  • @Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger, @CustomLog

@Data

  • @ToString, @EqualsAndHashCode, 所有属性的@Getter, 所有non-final属性的@Setter和@RequiredArgsConstructor的组合,通常情况下,我们使用这个注解就足够了。

@Builder

  • 建造者设计模式描述了一种灵活的创建对象的方式。 Lombok可以帮你轻松的实现该模式。

@Singular

  • 对集合进行操作,最终生成不可变集合,不可变集合底层是可变集合,修改时会报抛异常.
    @Delegate

@Value

  • 也是整合包,但是他会把所有的变量都设成 final 的,其他的就跟 @Data 一样,等于同时加了以下注解
    @Getter (注意没有setter)
    @ToString
    @EqualsAndHashCode
    @RequiredArgsConstructo

@Accessors

  • 使用在 类或字段上,目的是修改 getter 和 setter方法的内容

@Wither

  • 不推荐
  • 快速生成克隆类

@Delegate

  • 不建议使用
  • 生成委托对象的方法
    types: 委托人
    excludes: 被委托人

@ExtensionMethod

  • 可以扩展已有的类
    1. 对代码的风格的影响很大
    2. 对于父类的扩展不是很好的应用到子类上.
    3. 在 netbeans中不起作用
    4. @ExtensionMethod 作用范围没有很好的定义
    5. 此功能比我们想象中有更多错误

@NonNull

  • 对方法参数进行 null 检查通常不是一个坏主意,特别是如果该方法形成的 API被其他开发者使用。虽然这些检查很简单,但是他们可能变得冗长,特别是当你有多个参数时。

@Cleanup

  • 自动资源管理:自动调用关闭资源方法 ,默认调用 close() 方法,在 finaly块中,只有在给定的资源不是 null的情况下,才会调用清理方法,如果要清理的对象没有 close()方法,可以指定一个无参方法来进行自动清理.

Lombok 原理

  • 了解了简单的使用之后,现在应该比较好奇它是如何实现的。整个使用的过程中,只需要使用注解而已,不需要做其它额外的工作,那玄妙之处应该是在注解的解析上。JDK5引入了注解的同时,也提供了两种解析方式。

运行时解析

  • 运行时能够解析的注解,必须将@Retention设置为RUNTIME,这样可以通过反射拿到该注解。java.lang.reflect反射包中提供了一个接口AnnotatedElement,该接口定义了获取注解信息的几个方法,Class、Constructor、Field、Method、Package等都实现了该接口,大部分开发者应该都很熟悉这种解析方式。
    boolean isAnnotationPresent(Class<? extends Annotation> annotationClass);
    <T extends Annotation> T getAnnotation(Class<T> annotationClass);
    Annotation[] getAnnotations();
    Annotation[] getDeclaredAnnotations();
    

Lombok问题

  • 无法支持多种参数构造器的重载。
上一篇:runtime和动态绑定


下一篇:对象中的boolean类型属性添加@Data没有getter和setter