Lombok类似于idea自带的快捷方法插入Generate。但是功能比Generate更加强大。
Lombok可以通过一些简单的注解来帮助我们少写一些臃肿的java代码,源代码不会出现这些快捷代码,而是在编译时插补到字节码文件中

添加Lombok功能

  1. 通过jar包本地安装或者添加maven依赖引入Lombok
  2. (可选操作)安装idea插件:lombok 这样可以在idea侧边栏Structure中看到将自动生成的方法。

不安装就看不到
Structure显示的是当前文件的信息,如当前显示页面为pom.xml,则Structure显示的是下载的依赖信息。在index.html时则显示的是所有标签信息

  1. <dependency>
  2. <groupId>org.projectlombok</groupId>
  3. <artifactId>lombok</artifactId>
  4. <version>1.18.16</version>
  5. </dependency>

Lombok注解汇总

大部分Lombok注解都写在类前,少部分注解既可以类上也可以属性上。还有的写在特定位置
**

方法生成注解

  • @Getter/@Setter:可以作用在类上和属性上
    • 放在类上,会对所有的非静态(non-static)属性生成Getter/Setter方法
    • 放在属性上,会对该属性生成Getter/Setter方法。并可以指定Getter/Setter方法的访问级别。
  • @EqualsAndHashCode:默认情况下,会使用所有非瞬态(non-transient)和非静态(non-static)字段来生成equals和hascode方法,也可以指定具体使用哪些属性。
  • @ToString:生成toString方法,默认情况下,会输出类名、所有属性,属性会按照顺序输出,以逗号分割。
  • @Data:自动为当前类所有字段添加toString,set,get,equals,hashcode,canEqual方法。即一系列Lombok方法注解的集合
  • @AllArgsConstructor:生成全参构造器(即参数数量=全部属性数)
  • @RequiredArgsConstructor:部分参数构造器
  • @NoArgsConstructor:无参构造器

    其他功能注解

  • @NotNull在参数中使用,如果调用时传了null值,就会抛出空指针异常

  • @Synchronized 用于方法,可以锁定指定的对象,如果不指定,则默认创建一个对象锁定
  • @Log作用于类,创建一个log属性
  • @Accessors(chain = true)使用链式设置属性,set方法返回的是this对象。
  • (链式设置属性举例:
  • Lombok - 图1
  • @RequiredArgsConstructor:创建对象
  • @UtilityClass:工具类
  • @ExtensionMethod:设置父类
  • @FieldDefaults:设置属性的使用范围,如private、public等,也可以设置属性是否被final修饰。
  • @Cleanup: 关闭流、连接点。
  • @EqualsAndHashCode:重写equals和hashcode方法。
  • @Builder:使用builder模式创建对象
    • 常规模式要得到带值的对象是new时传参创建,或者创建后再通过set传参赋值。如果对象的属性很多,使用builder就更方便些,相当于帮你创建了个空对象并帮你set。
    • 自动创建一个静态方法用于创建对象,同时对每一个属性都创建一个同名的方法用于赋值,方法参数类型为对应属性的类型
    • 要使用builder需要添加全参构造器,且builder是通过set,get设置所有的值,则默认的属性值无效 ```java @Builder()
      @Getter public class UserInfo { private String name; //自动创建个 void name(String) private Integer status; //自动创建个 void status(Integer)

UserInfo userInfo = UserInfo.builder()
.name(“zzl”) .status(1) .build(); //最后要调用build()才是正式创建 ```

Lombok弊端

  1. jdk版本升级可能无法使用,需要转换为idea自带的快捷方法。可以使用 Delombok 工具将Lombok转化为Idea自带的setter,getter,toString….方法 但是还是很麻烦(因为Lombok并非java标准库)
  2. 胁迫别人使用Lombok且降低耦合:虽然Lombok很流行,但是别人读你的带有Lombok的代码就不得不安装与了解Lombok,不安装则无法运行。其他项目引入你的代码也必须引入Lombok依赖或者jar包
  3. 主动性降低,比如Lombok创建构造器,参数无法控制顺序。