• lombok


    lombok
    #

      lombok是一款可以精减java代码、提升开发人员生产效率的辅助工具,利用注解在编译期自动生成setter/getter/toString()/constructor之类的代码。代码越少,意味着出bug的可能性越低。当然主要是看到周志明将编译期优化的时候看到这个插件了,就想试一试。即它最终能够达到的效果是:在源码中没有getter和setter方法,但是在编译生成的字节码文件中有getter和setter方法,注解生命周期SOURCE

    原理分析

      使用javac编译源码的过程如下:

    解析和填充符号表

    包括解析包括词法分析和语法分析
    词法解析:将源代码的字符流(每个字符)转变为标记(token,比如int a=b+2包括6个标记)集合。
    语法分析:将token集合构造成抽象语法树(AST,用树形结构描述代码语法结构)。
    填充符号表:主要记录抽象语法树的顶级节点。

    插入式注解处理器的注解处理过程

    如果插件在注解处理期间对抽象语法树进行了修改,编译期重新进入第一步,直到没有修改为止。

    语义分析和字节码生成

    语法分析主要是检查源程序结构上是否正确。语义分析则是检查逻辑上的性质,比如变量使用前是否声明,变量赋值类型是否正确,方法是否有返回值等。

    字节码生成:将抽象语法树,符号表转化为字节码写到磁盘,并进行少量的代码添加和替换,比如()方法,为了实例化子类过程为:先实例化父类构造器,再初始化变量,最后执行语句块。替换:比如将字符串的+,替换为StringBuffer或StringBuilder的append方法。

    lombok在第二步增加getter和setter等方法定义的相应树节点

    常用注解

    • @Data:注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
    • @Setter:注解在属性上;为属性提供 setting 方法
    • @Getter:注解在属性上;为属性提供 getting 方法
    • @Log:注解在类上;为类提供一个属性名为log 的 log4日志对象
    • @Log4j:Creates private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
    • @Log4j2:Creates private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
    • @Slf4j:Creates private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
    • @NoArgsConstructor:注解在类上;为类提供一个无参的构造方法
    • @AllArgsConstructor:注解在类上;为类提供一个全参的构造方法
    • @NonNull:注解在参数上,要求非空

    例子:

        import lombok.NonNull;
        public class NonNullExample extends Something {
            private String name;
            public NonNullExample(@NonNull Person person) {
            super("Hello");
            this.name = person.getName();
            }
        }
    
  • 相关阅读:
    MVC发布出现:未能将文件binxxx.xml 复制到 objReleasePackageTmpinxxx.xml,未能找到文件
    微信第三方平台,微信支付开发 服务商模式 签名错误
    微信第三方平台代公众号发起网页授权 48001 api unauthorized 问题
    微信官方平台第三方开发 关于代公众号发起网页授权
    关于微信第三方平台全网发布的坑
    ASP.NET之MVC 微信公众号授权给第三方平台的技术实现流程(获取第三方平台access_token)
    Maven命令安装jar包到本地仓库
    jsp中jstl标签的类似 if
    一道经典的Java面试题:equals ,== 和hashcode()的区别
    Eclipse快捷键-方便查找
  • 原文地址:https://www.cnblogs.com/xzwblog/p/7172137.html
Copyright © 2020-2023  润新知