LomBok-小辣椒插件学习笔记

WUYAN大约 7 分钟JavaWebLombok插件

一、LomBok插件概述

LomBok插件是一款插件化注解API,可以在Java程序编译时根据注解为程序添加一些必需的通用代码,如常用的Getter、Setter、有参和无参构造方法等。

使用这款插件可以在很大程度上简化程序员所需要书写的代码量,但也有可能会带来一些意想不到的小问题,使程序的可读性变差。

二、LomBok插件配置方法

1、导入依赖包,可以通过maven或者手动导入的方式完成。

2、在IDEA中安装LomBok插件(在IDEA的新版本中默认是绑定安装的)

插件的作用:在java文件编译之后的class文件中确实会包含get、set方法,但在书写源码时是没有这些方法的定义的,IDEA会认为这是错误,所以这个时候就需要一个lombok插件来解决问题。

3、重启IDEA后,就可以开始使用LomBok插件的功能了,如果在运行时有报错,可能是插件没能正常加载,再次重启IDEA就好。

三、LomBok插件常用注解

1、@Getter

作用:用来给成员变量生成相应的get方法,同时可以为生成的方法指定访问修饰符,默认修饰符是 public ,也可手动指定修饰符。

位置:指定在类上,会对当前类的所有字段都生成相应的get方法,指定在字段上,只会对当前字段生效,当类和字段都设定上后,字段部分的设定优先生效。

注:@Getter注解在指定类的时候,默认不会对 静态变量 生效,需要手动在静态字段上指定才可以,对于 final 常量可以正常生效。

2、@Setter

作用:用来给成员变量生成相应的set方法,同时可以为生成的方法指定访问修饰符,默认修饰符是 public ,也可手动指定修饰符。

位置:同 @Getter 的用法。

注:@Setter注解在指定类的时候,默认也不会对 静态变量 生效,需要手动在静态字段上指定才可以,但对于 final 常量不可以生效。

@Getter
@Setter(AccessLevel.PRIVATE)	//设定生成的set方法是private的
public class LomBok {
    int id = 10;
}//可在类上直接设置@Getter和@Setter注解
3、@Accessors

作用:这个注解要与@Getter与@Setter搭配使用,用来修改默认的setter与getter方法的形式。

位置:可指定在类和字段上。

属性

3.1、chain 属性,属性值有true和false两种,默认是false,打开后可以让set方法支持链式调用,也就是set方法会返回对象本身。

3.2、fluent 属性,属性值有true和false两种,默认也是false,打开后会使get和set方法的名字变得和成员变量的名称一样,通过重载去调用git和set。

注:@Getter和@Setter注解生成的get和set方法的命名规则

默认是在get或set后将原变量名的开头字母大写,再拼接到一块,若原本就是大写,则不进行改变。

int id;		getId();	//将成员变量首字母大写后拼接。
int Id		getId();	//原名称大写则不变。
4、@ToString

作用:用于格式化输出对象和toString方法类似,生成方法时只会使用类中的非静态成员变量。

位置:只能指定在类上。

属性

  • includeFieldNames = true // 输出时是否显示字段名 ,默认是true
  • exclude = {"name"} // 排除某些字段,可多选,用逗号分隔就好
  • of = {"age"} // 只输出某些字段,和exclude不能同时使用
  • callSuper = true //是否输出父类对象的toString信息, 默认false
  • doNotUseGetters // 输出时不使用get方法获取成员属性

@ToString.Include.rank 用于排序,数字越大排序越靠前,只能适用于字段和方法类型。

@ToString.Include.name 用于自定义字段名称,也只能适用于字段和方法。

5、@EqualsAndHashCode

作用:用于生成equals和hashCode方法,也是只会使用非静态成员变量。

位置:只能指定在类上。

属性

  • callSuper 用于比较父类对象是否相同,对于继承的子类的equals方法中最好使用这个选项,可以提高安全性,防止将父类对象和子类对象当成相同的对象。默认是false
  • cacheStrategy 对于hashCode方法是否添加缓存,在使用时会将第一次结果保存在变量中,下次就可以直接调用使用,默认是从不。
  • exclude = {"name"} // 排除某些字段,可多选,用逗号分隔就好
  • of = {"age"} // 只输出某些字段,和exclude不能同时使用
6、构造器相关注解

共同点:

都只能在类上使用。

staticName:自定义构造方法的名称,原构造方法会被设定为私有。

access:设定方法的访问修饰符。默认是public

onConstructor:生成指定注解的构造器,默认为空
(1)、@AllArgsConstructor

作用:生成所有参数的构造方法,

(2)、@NoArgsConstructor

作用:生成无参的构造方法

特有属性:force:可以将所有 final 字段初始化为 0、null、false。默认为 false。

(3)、@RequiredArgsConstructor

作用:会将类中所有带有@NonNull注解 的或者带有final修饰的成员变量生成对应的构造方法。

7、@Data

作用:相当于注解集合。效果等同于 @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor 效果同和这5个注解的效果。

注:该注解并不包括@NoArgsConstructor和@AllArgsConstructor注解效果,且在有继承的情况下不建议单独使用此注解,因为这里的equals方法没有经过设定,容易出现问题,应和@EqualsAndHashCode配合使用。

位置:指定在类中

属性:staticConstructor:为生成的构造器指定自定义方法名称。

8、@value

作用: 将字段都变成不可变类型:使用final修饰, 同时还包含@ToString、@EqualsAndHashCode、@AllArgsConstructor 、@Getter(注意只有Getter没有Setter)和@Data的作用比较类似。

位置:指定在类上

属性:staticConstructor:为生成的构造器指定自定义方法名称。

9、@SneakyThrows

作用:用于构建try-catch语句将方法包括起来。

位置:指定在方法或构造方法上

属性:value: 用于指明要抛出的异常类型,默认是Throwable

10、@Cleanup

作用:主要用来修饰 IO 流相关类, 会在 finally 代码块中对该资源进行 close();

位置:作用于局部变量中

属性:value:指定关闭方法的方法名,默认是close。

注:也可以使用try-with-resources的写法,也可以自动关闭歹有autoclose的连接。

11、@Builder

作用:建造者模式,一种比较重要的创建对象的过程,不再是生成一个构造方法,而是使用了一个内部类来完成对象的创建,可以精细化、分步去进行一个类对象的创建。

构造器类的的set方法支持链式调用

位置:类、方法、构造器上使用

属性

builderMethodName:生成builder内部类对象的方法名称,默认是:builder

buildMethodName: 返回建造对象的方法名称,默认是:build

builderClassName:内部类的类名,

toBuilder: 将build重新变回builder进行再次设置,默认为false

@Builder.Default

使用在属性上,用于指定某个属性的默认值,若无设置则使用默认值。

@Builder.ObtainVia

使用在属性上和方法内的参数里,用于对toBuilder方法生成的builder对象的值或方法的获取方式做一些限定。

field:将某个属性的值用另外一个属性的值去代替
method:将某个属性的值获取方法改成自己指定的方法

四、LomBok插件优缺点

优点:

可以帮助我们省去很多冗余代码,使项目的开发更加高效、便捷。

缺点:

有很高的侵入性,在项目中有人使用会使得所有的人都要去使用这种插件,

会让代码可读性变差,调试起来也更加麻烦

同时过度使用可能会创造很多用不到的方法,造成隐患。