1. springboot 已经默认管理了lombok的版本,只需引入即可
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
2. 要想让IDE在编译阶段识别lombok的注解,需要安装一下lombok
Lombok的官方地址: https://projectlombok.org/
下载地址:https://projectlombok.org/download.html
下载完lombok.jar后,双击运行,或者在cmd命令行输入: java -jar lombok.jar 运行
选择完IDEs,点击Install / Update按钮即可,安装成功界面:
打开我们STS的配置文件STS.ini检查一下lombok的配置,我的目录是D:\Program Files (x86)\sts-bundle\sts-3.8.3.RELEASE\STS.ini
这个时候,如果我们去启动STS的话,会发现启动不了,什么问题呢
因为我们的lombok目录中有(x86),导致其路径识别不了
由于安装lombok的时候,其已经把lombok.jar拷贝到了和STS.exe同目录下
所以我们可以把
-javaagent:D:\Program Files \(x86\)\sts-bundle\sts-3.8.3.RELEASE\lombok.jar
改为
-javaagent:lombok.jar
保存即可。
然后在启动STS,已经可以顺利启动。
3. 使用lombok
lombok提供的注解:
- @Getter: 自动生成Getter方法
- @Setter: 自动生成Setter
- @ToString: 覆盖tostring方法
- @EqualsAndHashCode: 覆盖equal和hashCode方法
- @Data: 等价于@Getter + @Setter + @ToString + @EqualAndHashCode + @RequiredArgsConstructor等组合
- @Slf4j: 默认使用slf4j的日志对象,直接用log对象写日志即可
- @AllArgsConstructor:会生成一个包含所有变量,同时如果变量使用了NotNull annotation , 会进行是否为空的校验
- @NoArgsConstructor:生成一个无参数的构造方法
- @RequiredArgsConstructor:会生成一个包含常量,和标识了NotNull的变量 的构造方法。生成的构造方法是private,如何想要对外提供使用可以使用staticName选项生成一个static方法
@NoArgsConstructor/@RequiredArgsConstructor /@AllArgsConstructor
这三个注解都是用在类上的,第一个和第三个都很好理解,就是为该类产生无参的构造方法和包含所有参数的构造方法,
第二个注解则使用类中所有带有@NonNull注解的或者带有final修饰的成员变量生成对应的构造方法,当然,和前面几个注解一样,成员变量都是非静态的,
另外,如果类中含有final修饰的成员变量,是无法使用@NoArgsConstructor注解的。
三个注解都可以指定生成的构造方法的访问权限,同时,第二个注解还可以用@RequiredArgsConstructor(staticName=”methodName”)的形式生成一个指定名称的静态方法,返回一个调用相应的构造方法产生的对象,下面来看一个生动鲜活的例子
@RequiredArgsConstructor(staticName = "sunsfan")
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@NoArgsConstructor
public class Shape {
private int x;
@NonNull
private double y;
@NonNull
private String name;
}
实际效果相当于:
public class Shape {
private int x;
private double y;
private String name;
public Shape(){
}
protected Shape(int x,double y,String name){
this.x = x;
this.y = y;
this.name = name;
}
public Shape(double y,String name){
this.y = y;
this.name = name;
}
public static Shape sunsfan(double y,String name){
return new Shape(y,name);
}
}