Java基础002 --- Lombok的使用

简介

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();
}

生成字节码文件:

 

posted @ 2019-09-22 21:22  光头用沙宣  阅读(295)  评论(0编辑  收藏  举报