zoukankan      html  css  js  c++  java
  • 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();
    }

    生成字节码文件:

  • 相关阅读:
    【问题:SSH】win10使用SSH链接服务器时,提示:Host key verification failed
    【深度学习大讲堂】首期第三讲:深度学习基础 第一部分:基础结构单元
    【深度学习大讲堂】首期第二讲:深度学习简史
    【深度学习大讲堂】首期第一讲:人工智能的ABCDE 第二部分:简谈当前AI技术与发展趋势
    【深度学习大讲堂】首期第一讲:人工智能的ABCDE 第一部分:从人工智能和计算机视觉说起
    实验吧-隐写-so beautiful so white WP
    实验吧-隐写 最低位的亲吻 WP
    jarvis OJ basic (一) WP
    实验吧web-登入一下好吗
    实验吧web-oncemore
  • 原文地址:https://www.cnblogs.com/sniffs/p/11566930.html
Copyright © 2011-2022 走看看