Lombok是一种通过注解的方式减少JAVA实体类中大量冗余代码,诸如get、set以及构造方法等的Java库
一、安装Lombok
步骤一 项目引入lombok插件
1 - 非maven依赖托管项目再lib文件夹中添加lombok.jar包
2 - maven项目直接在项目pom.xml文件夹添加依赖
步骤二 在Intellij idea或者Eclipse集成lombok插件让他们可以识别lombok
Intellij idea
方式一、进入plugins->Browse repositories->输入Lombok搜索插件,点击install下载,这种方式目前尝试过,下载失败
方式二、进入github,搜索lombok for Intellij插件选择Intellij idea对应版本的插件下载zip包,把解压后的文件放到Intellij idea安装目录的插件库即plugins文件夹下
二、使用教程
1 - @Data注解作用于类中,相当于同时加入@Getter@Setter@ToString @EqualsAndHashCode
@Data
public class UserInfoDTO implements Serializable{
/**用户编号**/
private Long uid;
/**用户姓名**/
private String uname;
/**年龄**/
private Integer age;
}
2 - @Getter@Setter 可在类和成员变量上使用,注解作用于属性上用于自动生成get、set方法
public class UserInfoDTO implements Serializable{
/**用户编号**/
@Getter
private Long uid;
@Setter
/**用户姓名**/
private String uname;
/**年龄**/
private Integer age;
}
3 - @NonNull该注解用于判断是否为空,如果调用set方法设置为空则抛出java.lang.NullPointerException
public class UserInfoDTO implements Serializable{
/**用户编号**/
@Getter
private Long uid;
@Setter@NonNull
/**用户姓名**/
private String uname;
/**年龄**/
private Integer age;
}
4 - @Synchronized该注解作用与方法自动添加同步机制,生成的源码显示生成的方法并不直接锁方法而是锁该方法下的代码块,锁是对象锁
5 -@ToString注解主要是作用于ToString方法,里面可以设置多个属性
callSuper 是否输出父类的toString方法
includeFieldNames 是否包含字段名称,默认为true
exclude排除生成的toString字段
@Getter
@Setter
@ToString(callSuper = false, includeFieldNames = true, exclude = "uid")
public class UserInfoDTO implements Serializable{
/**用户编号**/
private Long uid;
/**用户姓名**/
private String uname;
/**年龄**/
private Integer age;
}
lombok生成的等价源码
public class UserInfoDTO implements Serializable {
private Long uid;
private String uname;
private Integer age;
public UserInfoDTO() {
}
public Long getUid() {
return this.uid;
}
public String getUname() {
return this.uname;
}
public Integer getAge() {
return this.age;
}
public void setUid(Long uid) {
this.uid = uid;
}
public void setUname(String uname) {
this.uname = uname;
}
public void setAge(Integer age) {
this.age = age;
}
public String toString() {
return "UserInfoDTO(uname=" + this.getUname() + ", age=" + this.getAge() + ")";
}
}
@Cleanup该注解用于确保已分配的资源被释放,例如IO连接的关闭
public static void testCleanUp(){
try{
@Cleanup FileOutputStream bos = new FileOutputStream("test.txt");
bos.write(new byte[]{'A','B','C'});
}catch(IOException ex){
}
}
lombok生成的等价源码
public static void testCleanUp() {
try {
FileOutputStream bos = new FileOutputStream("test.txt");
try {
bos.write(new byte[]{65, 66, 67});
} finally {
if(Collections.singletonList(bos).get(0) != null) {
bos.close();
}
}
} catch (IOException var5) {
;
}
}
看不懂为什么要先把文件输出流对象放到一个单例集合里面再去获取它进行判空