lombok
介绍
lombok提供了简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的 java 代码;特别是相对于 POJO。我们的
业务代码中有很多的POJO类,每个POJO类都需要设置setter和getter方法。lombok可以通过添加注解来帮助我们在编译后
的class文件中添加getter和setter方法,而无需我们在源代码中添加getter和settter;具体使用示例如下:
示例1:@Getter和@Setter注解:注解在属性上,会自动在class字节码文件生成getter和setter方法
实体类:
import lombok.Getter;
import lombok.Setter;
public class Person {
@Getter@Setter private String name;
@Getter@Setter private String sex;
@Getter@Setter private String address;
@Getter@Setter private int age;
}
客户端调用类:
public class Client {
public static void main(String[] args) {
Person person = new Person();
person.setName("李雷");
person.setAddress("火星地球研究局");
person.setAge(18);
person.setSex("男");
System.out.println("name:"+person.getName()+";address:"+person.getAddress()+
";age:"+person.getAge()+";sex:"+person.getSex());
}
}
输出结果:
name:李雷;address:火星地球研究局;age:18;sex:男
示例2:
@Data注解:注解在类上,会自动在字节码文件中为类所有的属性生成getter和setter方法,
以及equals,canEquals,hashCode和toString方法
实体类:
import lombok.Data;
@Data
public class Person {
private String name;
private String sex;
private String address;
private int age;
}
客户端调用类:
public class Client {
public static void main(String[] args) {
Person person = new Person();
person.setName("李雷");
person.setAddress("火星地球研究局");
person.setAge(18);
person.setSex("男");
System.out.println(person);
}
}
输出结果:
Person(name=李雷, sex=男, address=火星地球研究局, age=18)
除了以上介绍的@Getter,@Setter和@Data注解外,还提供如下注解:
- @NonNull:帮助我们避免空指针异常
- @ToString:自动生成toString方法
- @EqualsAndHashCode:自动生成equals和hashCode方法
- @Cleanup:自动帮我们调用close方法
- @Synchronized:自动给方法添加synchronize关键字
- @NoArgsConstructor:自动生成无参数构造函数
- @AllArgsConstructor:自动生成全参数构造函数
使用lombok的利与弊
优点:
- 可以消除大量模板代码,我们的系统中存在大量的POJO类,使用lombo框架的话,可以省去很多代码量的编写,
提高编码效率
- 减少出错概率,当我们修改一个POJO类的属性时,需要同时修改setter和getter方法,
通过lombok自动创建setter和getter方法,可以避免人工操作出现的失误。
缺点:
- 降低了源代码的可读性和完整性
lombok的原理
源代码文件在经过javac编译之后,会得到一个抽象语法树,得到的抽象语法树会经过lombok处理,
在抽象语法树中插入对应的方法;之后javac程序使用修改后的抽象语法树生成class文件。
详细原理介绍见lombok的使用和原理
lombok的安装
如果需要试用lombok的话,需要在IDE中安装lombok才可以使用,具体的安装方法见链接: