走进lombok世界

走进lombok世界

 Welcome to lombok world....

什么是lombok?

    Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.
Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.

       lombok项目是一个Java库,它会自动插入您的编辑器和构建工具中,从而为您的Java增光添彩。永远不要再去生成getter或equals方法,只需在你的类上添加一个注解,你的类则变成了一个功能全面的生成器,包括自动产生日志记录变量等等。

       简而言之,lombok就是简化Java开发者编写代码用的一个Java类库。

如何使用lombok?

1、maven工程项目直接在pom文件中添加lombok依赖即可.

<dependency>

    <groupId>org.projectlombok</groupId>

    <artifactId>lombok</artifactId>

    <version>1.18.10</version>

</dependency>

2、IDEA插件安装(笔者自用,Eclipse请自行Google)

不安装插件,项目编译会报错。这个也是一个不好的地方吧,毕竟要求参与项目的每个成员都要安装lombok插件-_-

File -> Settings -> Plugins -> (搜索)lombok (如下图,这里我已经安装过了,装好重启即可)

网络原因,就不截图了。。。-_-

 

 

3、相关常用注解

@Getter/@Setter: 自动生成get/set方法

Source Code

@Getter

@Setter

public class Person {

    private Integer id;

    private String userName;

}

Byte Code

public class Person {

    private Integer id;

    private String userName;

 

    public Person() {

    }

 

    public Integer getId() {

        return this.id;

    }

 

    public String getUserName() {

        return this.userName;

    }

 

    public void setId(Integer id) {

        this.id = id;

    }

 

    public void setUserName(String userName) {

        this.userName = userName;

    }

}

@Builder: 用在类上,将类变成builder API风格,即Fluent Interface风格

Source Code

@Builder

public class CustomException<T> {

    private int code;

    private String msg;

    private T data;

}

Byte Code

public class CustomException<T> {

    private int code;

    private String msg;

    private T data;

 

    CustomException(int code, String msg, T data) {

        this.code = code;

        this.msg = msg;

        this.data = data;

    }

 

    public static <T> CustomException.CustomExceptionBuilder<T> builder() {

        return new CustomException.CustomExceptionBuilder();

    }

 

    public static class CustomExceptionBuilder<T> {

        private int code;

        private String msg;

        private T data;

 

        CustomExceptionBuilder() {

        }

 

        public CustomException.CustomExceptionBuilder<T> code(int code) {

            this.code = code;

            return this;

        }

 

        public CustomException.CustomExceptionBuilder<T> msg(String msg) {

            this.msg = msg;

            return this;

        }

 

        public CustomException.CustomExceptionBuilder<T> data(T data) {

            this.data = data;

            return this;

        }

 

        public CustomException<T> build() {

            return new CustomException(this.code, this.msg, this.data);

        }

 

        public String toString() {

            return "CustomException.CustomExceptionBuilder(code=" + this.code + ", msg=" + this.msg + ", data=" + this.data + ")";

        }

    }

}

 

@Data:功能相当于(@Getter/@Setter/@RequiredArgsConstructor/@ToString

/@EqualsAndHashCode)注解的组合

@RequiredArgsConstructor/NoArgsConstructor 自动生成空参数构造

@AllArgsConstructor 自动生成全参数构造

@ToString 自动生成toString方法

@EqualsAndHashCode 自动重写equals和hashCode方法

@Value 相当于@Data,不提供@Setter方法。为每个字段添加final关键字

 

探索lombok底层实现

要了解lombok如何实现,首先我们要稍微了解下JSR规范和编译器原理。

1、JSR规范是什么?( https://zh.wikipedia.org/wiki/JCP)   

JSR全称Java Specification Requests(Java规范请求);JCP(Java Community Process)作为正式规范文档。JCP是一个  开放性国际组织,主要有Java开发者以及被授权者组成(主要是为了Java语言的发展和更新);而lombok则遵循JSR 269 规范【Pluggable Annotations Processing API】(https://www.jcp.org/en/jsr/detail?id=269

2、为什么要了解编译原理?

     上文提到,lombok是一款运行在编译期的Java 类库。所以当执行javac进行编译的时候,则lombok也会同时运行。

     在编译原理一书中提到,编译期大致流程分为:         

扫描源文件 -> 词法分析 -> Token  -> 语法分析 -> AST(抽象语法树) -> 语义分析 -> 生成字节码文件

Lombok则是一款运行在编译期的类库,通过修改AST,增加新的节点,从而生成对应的字节码文件.

总结

      总的来说,lombok就是为了简化开发者开发的,至于用不用,仁者见仁,智者见智吧。毕竟它要依赖插件,恐怖的传播性。但是也有认为这并不算什么,一句话:看项目吧。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值