java lombok 使用_Java基础002 --- Lombok的使用

简介

Lombok是一个java库,通过使用简单的注解,简化java代码开发,并且在编译生成的字节码文件中生成对应的方法;主要的应用场景:java bean的代码开发。

在以往的开发中,我们需要在java bean中为每个属性添加getter&setter方法,并且需要重写toString和equals方法;有多个java bean,我们需要添加很多重复化代码,

并且,如果我们需要添加或者修改某个属性,我们需要排查对应的getter、setter、toString和equals方法,这样不仅排查难度大,并且容易出错;使用lombok可以解决该问题。

构建方法

应用程序使用maven构建

25a383dca7f7078fc54affb78ceb6e7f.png

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;

}

生成的字节码文件:

19b46f54d478cad9c77f52df56f926b8.png

@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;

}

生成的字节码文件:

6be1c74cbdbcc313bbcee9b65b19b341.png

@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;

}

生成字节码文件:

c06f94304b2577649ca6babef170a6e3.png

@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;

}

生成的字节码文件:

ac427a0b9e95289c3a6308b863ffb91a.png

@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 classStudent6 {

@Getter

@Setter

@Accessors(fluent= true)privateInteger id;

@Getter

@Setter

@Accessors(chain= true)privateString name;

@Getter

@Accessors(prefix= "a")privateString aSports;private staticString points;

}

生成的字节码文件:

c8fb612b669069d2b5f5fa3c7ce2798c.png

@Builder

生成java建造者模式代码

@Cleanup

用于在代码推出当前作用域前,释放资源,主要用法如下:

1、释放固有资源(如IO输入输出、数据库连接)

源码:

public classTestCleanUp {public void test01() throwsIOException {

@Cleanup

FileInputStream fileInputStream= new FileInputStream("aa.txt");byte [] bytes = new byte[1024];int len =fileInputStream.read(bytes);

}

}

生产字节码文件:

9edf2132b1765e077da5be2f651d8b95.png

2、非固有资源,需要制定一个无参的释放资源方法

源码:

public classStudent8 {privateInteger id;privateString name;privateString aSports;public voidtestClose() {

System.out.println("testClose.");

}

}public voidtest02() {

@Cleanup("testClose")

Student8 student8= newStudent8();

}

生成字节码文件:

7e64ea59af83faa6184a33b9ed798729.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值