Lombok类似于idea自带的快捷方法插入Generate。但是功能比Generate更加强大。
Lombok可以通过一些简单的注解来帮助我们少写一些臃肿的java代码,源代码不会出现这些快捷代码,而是在编译时插补到字节码文件中
添加Lombok功能
- 通过jar包本地安装或者添加maven依赖引入Lombok
- (可选操作)安装idea插件:lombok 这样可以在idea侧边栏Structure中看到将自动生成的方法。
不安装就看不到
Structure显示的是当前文件的信息,如当前显示页面为pom.xml,则Structure显示的是下载的依赖信息。在index.html时则显示的是所有标签信息
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</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:部分参数构造器
-
其他功能注解
@NotNull:在参数中使用,如果调用时传了null值,就会抛出空指针异常
- @Synchronized 用于方法,可以锁定指定的对象,如果不指定,则默认创建一个对象锁定
- @Log作用于类,创建一个log属性
- @Accessors(chain = true)使用链式设置属性,set方法返回的是this对象。
- (链式设置属性举例:
- @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弊端
- jdk版本升级可能无法使用,需要转换为idea自带的快捷方法。可以使用 Delombok 工具将Lombok转化为Idea自带的setter,getter,toString….方法 但是还是很麻烦(因为Lombok并非java标准库)
- 胁迫别人使用Lombok且降低耦合:虽然Lombok很流行,但是别人读你的带有Lombok的代码就不得不安装与了解Lombok,不安装则无法运行。其他项目引入你的代码也必须引入Lombok依赖或者jar包
- 主动性降低,比如Lombok创建构造器,参数无法控制顺序。