Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码。仅五个字符(@Data)就可以替换数百行代码从而产生干净,简洁且易于维护的Java类。(百度百科)
简单来说,比如我们新建了一个类,然后在其中写了几个字段,然后通常情况下我们需要手动去建立getter和setter方法啊,构造函数啊之类的,lombok的作用就是为了省去我们手动创建这些代码的麻烦,它能够在我们编译源码的时候自动帮我们生成这些方法。
比方说,我把该jar包下载到了桌面上
第二步:打开黑窗口
win+r--》cmd--》打开黑窗口--》切换到该jar包所在的上级目录
此时,正在寻找开发工具IDE的安装路径,找到后会出现如下界面
当然,如果找的不对的话,或者你想切换成其它IDE,点击“Specify location...”,手动指定也是可以哒。
第四步:安装lombok
点击上图右下角的Install/Update;
这不是手动加上的,而是第四步安装后自动加上的。
点击Quit Installer,完成安装
第五步:测试
重启eclipse;
保存,Alt+F5--》更新maven项目;
打开设置项,找到"Plugins";
搜索:lombok,进行安装即可。
右侧有关于当前版本支持的注解明细及用法。
@Setter :注解在类或字段,注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成setter方法。
@Getter :使用方法同上,区别在于生成的是getter方法。
@Getter(lazy=true) :实际使用到的时候生成。
@ToString :注解在类,为类提供toString方法。
@EqualsAndHashCode: 注解在类,生成hashCode()和equals()方法。
默认情况下,生成包含所有非静态、非transient 字段的 equals 和 hashCode 方法。
@NoArgsConstructor: 注解在类,生成无参的构造方法。
@RequiredArgsConstructor: 注解在类,为类中需要特殊处理的字段生成构造方法,比如被final修饰和被@NonNull注解修饰的字段。
当我们往类上添加此注解后,如果该类没有需要特殊处理的字段,该注解不会生成任何代码的。(即不会生成无参构造方法)。
我们可以使用它来完成spring对象的构造注入。
我们知道,spring注入对象有5种方式:
构造函数注入(Constructor Injection)
属性注入(Setter Injection)
字段注入(Field Injection)
方法注入(Method Injection)
配置类注入(Configuration Classes Injection)
先说字段注入。
如上图所示,我们现在需要注入6个spring管理的对象。
如果用构造函数注入的话,我们可以结合此注解来完成。
第一步,需要将被注入的对象用final修饰。
第二步,在类添加此注解。
当然,这不够标准,但不影响对象的注入。
标准的注解应该是:
@RequiredArgsConstructor(onConstructor = @__(@Autowired)):用于在类中生成一个带有@Autowired注解的构造函数。
以上的代码等价于:
@AllArgsConstructor: 注解在类,生成包含类中所有字段的构造方法。
@NoArgsConstructor(force = true): 注解在类,生成无参的构造方法,并将字段设置为 final。
@AllArgsConstructor: 注解在类,生成包含类中所有字段的构造方法,并将字段设置为 final。
生成包含父类字段的 equals 和 hashCode 方法。
@Data: 注解在类,生成setter/getter()、equals()、canEqual()、hashCode()、toString()方法,如为final属性,则不会为该属性生成setter方法。
相当于:@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集。
@Slf4j: 注解在类,生成log变量,严格意义来说是常量。
@Builder:注解在类、构造函数或方法上,生成builder()方法,根据该方法来完成对类的私有属性的取值和赋值工作,但是无法调取到自定义的方法。
注意:
当使用@Builder注解后,将无法通过new来创建对象。
因为此注解会将构造方法私有化。
具体报错信息如下:
仍然需要传统的构造函数,百度AI说可以考虑同时使用@RequiredArgsConstructor注解。
这样一来,虽然idea不报错了,但实际上在编译的时候,还是会报错的。
意思是:需要无参构造方法,但只找到了有参构造方法。
如果我们在使用@Builder注解的同时,仍然希望通过new来创建对象,我们需要添加两个注解@NoArgsConstructor和@AllArgsConstructor。
当使用 @Builder 注解生成构建器模式时,被该注解修饰的属性如果没有显式赋值,Lombok 会自动为其赋予指定的默认值。
如果在构建对象时没有为 qycfDetailsVoList 赋值,则使用 null 作为默认值。
@Accessors(chain = true):注解在类上,和@Builder搭配使用,如果只有此注解,没有@Builder的话,该注解将毫无意义,无法单独使用。
@NonNull:生成非空检查代码,可以帮助我们避免空指针;
注解在参数上, 如果该类参数为 null , 就会报出异常, throw new NullPointException(参数名)
@Cleanup: 用在流上,流读取完毕后,会自动帮我们调用close()方法
注释在引用变量前, 自动回收资源。默认调用 close() 方法。
@Value:@Data类似,区别在于它会把所有成员变量默认定义为private final修饰,自动生成 getter 方法(不会生成set方法)。
@Synchronized: 注解在方法上, 为方法提供同步锁。
@Log4j: 注解在类上, 为类提供一个属性名为 log 的 log4j 的日志对象。
@Slf4j: 注解在类上, 为类提供一个属性名为 log 的 log4j 的日志对象。
搞不明白的可以自己写一个例子,然后用反编译文件看看到底注解转换成了什么样的代码。
该注解的作用是:为类的指定属性增加默认值(即:完成初始化)。
说明:当项目当中存在两个以上的@Default注解时,我们需要注意,使用的是:lombok的@Default注解。
这样的数据,在返回前端(进行序列化)时,没有进行初始化的属性值,也就成了null。
如果想返回空字符串,需要我们手动将属性值赋空字符""。
或者,使用lombok的@Default注解,并将属性的默认值为空字符""。
在方法体中自动捕捉并重新抛出异常,无需显式地进行异常处理。
自动生成属性的不可变更新方法。
常见用法1
如果既想通过@Builder实例化对象,又想通过new来实例化对象,必须在类上声明两个关于构造函数的注解,即:
@NoArgsConstructor和@AllArgsConstructor;
常见用法2
如果只通过@Builder来实例化对象的话,不需要声明@NoArgsConstructor和@AllArgsConstructor;
常见用法3
如果只需要通过new来实例化对象的话,同样,也不需要声明@NoArgsConstructor和@AllArgsConstructor;
如何通过@Builder构造的对象,获取到变量的默认值?
通过对象拿到基本数据类型字段值,不是通过get()方法,而是直接调用:字段名称+();
当你所在的公司/团队禁止使用 Lombok 插件,只允许使用传统的方式来写get、set、toString这些基础方法,有没有方式能快速生成这些繁琐的体力活儿呢?IDEA 其实已经帮我们内置了快速生成这些方法的功能。