Lombok想要解决了的是在我们实体Bean中大量的Getter/Setter方法,以及toString, hashCode等可能不会用到,
但是某些时候仍然需要复写,以期方便使用的方法;在使用Lombok之后,将由其来自动帮你实现代码生成,注意,
其实在运行过程中,帮你自动生成的 。就是说,将极大减少你的代码总量。
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>1.16.10version>
dependency>
@Data
public class User {
private String name;
private int age;
}
@Test
public void testUser(){
User user = new User();
user.setName("AnyCode");
user.setAge(20);
System.err.println(user.toString());
}
@NonNull : 让你不在担忧并且爱上NullPointerException
@CleanUp : 自动资源管理:不用再在finally中添加资源的close方法
@Setter/@Getter : 自动生成set和get方法
@ToString : 自动生成toString方法
@EqualsAndHashcode : 从对象的字段中生成hashCode和equals的实现
@NoArgsConstructor/@RequiredArgsConstructor/@AllArgsConstructor 自动生成构造方法
@Data : 自动生成set/get方法,toString方法,equals方法,hashCode方法,不带参数的构造方法
@Value : 用于注解final类
@Builder : 产生复杂的构建器api类
@SneakyThrows : 异常处理(谨慎使用)
@Synchronized : 同步方法安全的转化
@Getter(lazy=true) :
@Log : 支持各种logger对象,使用时用对应的注解,如:@Log4j
如果想让lombok生效我们还需要针对idea工具进行插件的安装,下面我们按照顺序打开Idea配置
File > Settings > Plugins > Browse repositories… > 输入lombok,插件就会被自动检索出来,如下图所示:
我的工具已经安装了该插件,所有在右侧是没有任何按钮的,如果你的工具没有安装该插件,
右侧会有一个绿色的按钮,按钮的内容则是Install,点击安装后重启Idea就可以了。
告诉Lombok来生成 equals, hashCode方法,toString方法
在生成这些方法的时候lombok会使用所有的成员变量。
前面一个会自动创建一个包括所有成员的构造器。后面一个生成无参构造器。
注解会为每一个标记的成员变量自动生成对应的方法。
package com.jxlg.lance.springbootcorestudy.lombok;
import lombok.*;
/**
* @author lance(ZYH)
* @function 测试其他注解
* @date 2018-03-22 12:27
*/
@EqualsAndHashCode
@ToString
@AllArgsConstructor
public class Student {
@Setter
@Getter
private String stuName;
@Setter
@Getter
private Integer stuAge;
@Setter
@Getter
private String stuClass;
@Setter
@Getter
private Integer stuNumber;
}
如果你不想将注解用在全部的成员变量上,而是仅仅部分变量上,那么你可以提供一个指定的哪一个成员变量
需要自动生成方法的变量。举例: 比如在这里,我们只想让stuName,stuAge两个成员变量出现在 toString 方法里。
@EqualsAndHashCode
@ToString(of = {"stuName","stuAge"})
@AllArgsConstructor
public class Student {
@Setter
@Getter
private String stuName;
@Setter
@Getter
private Integer stuAge;
@Setter
@Getter
private String stuClass;
@Setter
@Getter
private Integer stuNumber;
}
这些代码已经比我们一开始要好太多了,但是它任然不够简洁。这里重复了大量的 @Getter 和 @Setter 注解。
如果你只是需要在Class中仅暴露几个字段,那么使用它们非常方便,但如果您需要为所有字段生成访问器,则会变得烦人又无聊。
为了使代码更加简洁, Lombok允许我们在类级上使用这些注解。如果这些注解放在类名之上,
那么lombok会自动为我们生成所有字段的访问方法。
EqualsAndHashCode
@ToString
@AllArgsConstructor
@Setter
@Getter
public class Student {
private String stuName;
private Integer stuAge;
private String stuClass;
private Integer stuNumber;
}
实例化这个类
@EqualsAndHashCode
@ToString
@AllArgsConstructor
@Setter
@Getter
@Builder
public class Student {
private String stuName;
private Integer stuAge;
private String stuClass;
private Integer stuNumber;
}
测试类:
package com.jxlg.lance.springbootcorestudy.lombok;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import static org.junit.Assert.*;
@RunWith(JUnit4.class)
public class StudentTest {
@Test
public void test(){
Student student = Student.builder()
.stuName("张三")
.stuAge(12)
.stuClass("高三")
.stuNumber(12222)
.build();
System.out.println(student);
}
}
结果:
Student(stuName=张三, stuAge=12, stuClass=高三, stuNumber=12222)
作用:自动为所有字段添加@ToString, @EqualsAndHashCode, @Getter方法,
为非final字段添加@Setter,和@RequiredArgsConstructor!
简单的来说所有所有的注解我们都可以使用一个注解完成.也就是@Data我们在定义类的时候
只需要加一个 @Data 注解,其他的注解我们都不需要在添加就可以达到前面所说的所有功能。
通过上面介绍的,我们平常使用Lombok只需要这样就是就可以了,如下:
@Data
@Builder
public class User {
private String name;
private Integer age;
}