简介
Lombok是一个java库,通过使用简单的注解,简化java代码开发,并且在编译生成的字节码文件中生成对应的方法;主要的应用场景:java bean的代码开发。
在以往的开发中,我们需要在java bean中为每个属性添加getter&setter方法,并且需要重写toString和equals方法;有多个java bean,我们需要添加很多重复化代码,
并且,如果我们需要添加或者修改某个属性,我们需要排查对应的getter、setter、toString和equals方法,这样不仅排查难度大,并且容易出错;使用lombok可以解决该问题。
构建方法
应用程序使用maven构建
Lombok注解的使用
@Getter
该注解可以用来注释类和类属性,属性上的注解会覆盖类上的注解;@Getter注解为所有的非静态方法生成getter方法;默认生成的getter方法是public的,可以通过AccessLevel指定访问权限;
@Getter注解还提供了一个高级特性,可以指定延迟加载,并且由lombok保证线程安全
源码:
@Getter(value = AccessLevel.PROTECTED) public class Student { @Getter(value = AccessLevel.PRIVATE) private Integer id; @Getter(lazy = true) private final String name = "AA"; private Integer age; private static String points; }
生成的字节码文件:
@Setter
该注解可以用来注释类和属性,注释类的时候,会为非static非final属性生成setter方法,并且属性上的注解会覆盖类上的注解;
同样,可以使用AccessLevel指定访问权限。
源码:
@Setter(value = AccessLevel.PROTECTED) public class Student1 { @Setter private Integer id; private final String name = "AA"; private Integer age; private static String points; }
生成的字节码文件:
@ToString
只能用来注释类,默认情况下使用非静态属性,有以下几种用法
incloudFieldNames | 返回字符串中是否包含属性名称,默认true |
exclude | 排除的属性 |
of | 包含的属性 |
callSuper | 返回字符串中调用父类的toString方法,默认false |
doNotUseGetters | 是否调用getter方法获取属性值,默认true |
onlyExplicitlyIncluded | 只显示被@ToString.Include注解注释的属性 |
@EqualsAndHashCode
只能用来注释类,默认情况下使用非静态属性和非transient修饰的属性,用法同ToString注解的表格
@NoArgsConstructor
生成无参构造器,有下面几个用法
staticName | 生成一个方法名为staticName指定的静态方法,该方法返回一个该类的实例 |
force | 为所有未初始化的final属性强制添加初始化值 |
access | 指定构造器访问权限 |
示例:
@NoArgsConstructor(staticName = "instance") public class Student4 { private Integer id; private final String name = "AA"; private Integer age; private static String points; }
生成字节码文件:
@AllArgsConstructor
生成全参数构造器,可以指定staticName和access,用法和无参构造器表格一致
@RequiredArgsConstructor
生成构造器,可能有参数或者无参数;有参数,参数只能为final或者@NonNull注解修饰的未初始化的属性
示例:
@RequiredArgsConstructor
public class Student5 {
@NonNull
private Integer id;
private final String name = "AA";
private final Integer age;
private String sports;
private static String points;
}
生成的字节码文件:
@Data
一个集合注解,包含了@Getter,@Setter,@ToString,@EqualsAndHashCode,@RequiredArgsConstructor注解的功能
@NonNull
指定元素取值不能为空,为空则抛空指针异常;可以用来修饰属性、方法、入参、临时变量
@Accessors
用于对生成的getter和setter方法进行配置,可以进行如下设置
fluent | 默认false,为true时,生成的getter和setter方法不带get和set前缀;如果未指定chain属性,则此时,chain属性为true |
chain | 默认false,为true时,生成的setter方法返回值为该类对象,不为void |
prefix | 指定生成的setter和getter方法满足小驼峰式命名 |
源码:
public class Student6 { @Getter @Setter @Accessors(fluent = true) private Integer id; @Getter @Setter @Accessors(chain = true) private String name; @Getter @Accessors(prefix = "a") private String aSports; private static String points; }
生成的字节码文件:
@Builder
生成java建造者模式代码
@Cleanup
用于在代码推出当前作用域前,释放资源,主要用法如下:
1、释放固有资源(如IO输入输出、数据库连接)
源码:
public class TestCleanUp { public void test01() throws IOException { @Cleanup FileInputStream fileInputStream = new FileInputStream("aa.txt"); byte [] bytes = new byte[1024]; int len = fileInputStream.read(bytes); } }
生产字节码文件:
2、非固有资源,需要制定一个无参的释放资源方法
源码:
public class Student8 { private Integer id; private String name; private String aSports; public void testClose() { System.out.println("testClose."); } } public void test02() { @Cleanup("testClose") Student8 student8 = new Student8(); }
生成字节码文件: