目录
1、lombok使用前准备
1.1 Eclpise使用lombok
1.1.1 pom导入
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
</dependency>
导入以后,lombok的使用和其它jar不一样,lombok是需要下载jar并且安装,否则注解没报错,但是不生效,其实它的注解没有生成相应的方法.所以得安装才有用。
1.1.2 lombok的安装
1.1.2.1 首先找到maven仓库,然后找到jar包
1.1.2.2 cmd命令打开jar包
我这里是把上面找到的jar包弄到了eclipse目录下,然后cmd运行它
运行后会出现如下所示,让你选择要安装插件的工具,我这里选择安装eclipse
1.1.2.3 查看eclipse.ini
查看eclipse的ini文件
按理说会自动生成如下所示
如果没有生成,或者这个jar包的位置不对,就自己写一下jar的路径,我的路径不对,只显示了jar的名称,不知道有没有效果,反正就按照网上找的,自己写了路径,不影响用起来一样的效果,不用纠结,弄好了重启一下eclipse
1.2 IDEA使用lombok
1.2.1 pom引入
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
</dependency>
1.2.2 安装插件
使用的时候右下角会提示启用lombok,点enable就可以了
2、注解
2.1 @Data
注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
2.2 @Setter
注解在属性上;为属性提供 setting 方法
2.3 @Getter
注解在属性上;为属性提供 getting 方法
2.4 @Log4j
注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
2.5 @NoArgsConstructor
注解在类上;为类提供一个无参的构造方法
2.6 @AllArgsConstructor
注解在类上;为类提供一个全参的构造方法
2.7 @Accessors
存取器,用于配置getter和setter方法的生成结果
2.7.1 @Accessors的fluent属性
boolean值,设置为true,则getter和setter方法的方法名都和属性名一样,且setter方法返回当前对象。
@Data
@Accessors(fluent = true)
public class Dept implements Serializable {
private Long deptno;
private String dname;
//使用了fluent = true,相当于如下效果
//deptno的get方法
//public Long deptno() {}
//deptno的set方法
//public Dept deptno(Long deptno) {}
//dname的get方法
//public String dname() {}
//dname的set方法
//public Dept dname(String dname) {}
}
2.7.2 @Accessors的chain属性
链式的,boolean值,设置为true,则setter方法返回当前对象
@Data
@Accessors(chain = true)
public class Dept implements Serializable {
private Long deptno;
private String dname;
//使用了chain = true,相当于如下效果
//deptno的set方法
//public Dept deptno(Long deptno) {}
//dname的set方法
//public Dept dname(String dname) {}
}
2.7.3 @Accessors的prefix属性
用于生成getter和setter方法,但是prefix会忽视指定的前缀。
@Data
@Accessors(prefix = "d")
public class Dept implements Serializable {
private Long dno;
private String dname;
//使用了prefix = "d",相当于如下效果
//dno的get方法
//public Dept getNo() {}
//dno的set方法
//public void setNo(Long dno) {}
//dname的get方法
//public Dept getName() {}
//dname的set方法
//public void setName(String dname) {}
}
2.8 @SuppressWarnings
抑制警告的关键字
2.9 @Builder
为类生成相对略微复杂的构建器 API
- 它作用于类,将其变成建造者模式
- 可以以链的形式调用
User user = User.builder().id("123").name("John").build();
- 初始化实例对象生成的对象是不可以变的,可以在创建对象的时候进行赋值
- 如果需要在原来的基础上修改可以加 set 方法,final 字段可以不需要初始化
2.9.1 它会生成一个全参的构造函数,但是没有无参构造函数,如果再使用@NoArgsConstructor或者手写无参构造函数就会报错
解决方法:
第一种:
三个注解同时使用@Builder、@NoArgsConstructor、@AllArgsConstructor
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String id;
private String name;
}
第二种
手写构造函数,然后使用@Tolerate
@Data
@Builder
public class User {
private String id;
private String name;
@Tolerate
public User() {
}
}
2.10 @RequiredArgsConstructor
@RequiredArgsConstructor作用在类上,代替@Autowired书写,自动生成了一个构造函数,该构造函数将带有final或@NonNull注解的参数作为参数,并将其赋值给对应的成员变量。
@RestController
public class TestController{
@Autowired
private UserService userVice;
}
等同于
@RequiredArgsConstructor
@RestController
public class TestController{
private final UserService userVice;
}