美文网首页技术干货
Lombok简介与使用

Lombok简介与使用

作者: 小草莓子桑 | 来源:发表于2020-03-08 01:15 被阅读0次

    最近项目中有人用到了Lombok,一些注解搞得我头晕晕的,借着学习来简单的给大家总结一下。

    官网介绍

    搜索Lombok发现,还有一个官网,链接贴出来了https://projectlombok.org/

    英文介绍

    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.

    中文介绍

    Project Lombok是一个java库,它自动插入到编辑器和构建工具中,增强java的性能。不要再编写另一个getter或equals方法,使用一个注释,您的类有一个功能齐全的生成器,自动记录变量,等等。
    简单说,他们作用就是让你在写java代码的时候,不用自己编写诸多的get set等方法,使用注解就可以搞定。

    使用方式

    我们就直接来说说使用方式

    maven依赖
    <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
            <optional>true</optional>
            <version>1.18.10</version>
     </dependency>
    

    说下<scope>provided</scope>,lombok只在编译阶段生效,不需要打入包中。
    说下<optional>true</optional>,这个设置为true表示,依赖不传递,举个栗子,A项目里面引用了lombok,设置了optional为true,B项目里面引用A,那么A项目依赖的lombok在B项目不会出现。

    常用注解

    从包里面看了下,注解很多,今天先说下常用注解吧,既然是编译阶段生效,我们就直接看下加上注解类编译出来的class吧


    lombok下面的注解
    @Data

    直接上代码。一个实体类里面两个字段,id、name

    @Data
    public class TestDto {
        private int id;
        private String name;
    }
    

    来来编译后的代码

    public class TestDto {
        private int id;
        private String name;
    
        public TestDto() {
        }
    
        public int getId() {
            return this.id;
        }
    
        public String getName() {
            return this.name;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public boolean equals(Object o) {
            if (o == this) {
                return true;
            } else if (!(o instanceof TestDto)) {
                return false;
            } else {
                TestDto other = (TestDto)o;
                if (!other.canEqual(this)) {
                    return false;
                } else if (this.getId() != other.getId()) {
                    return false;
                } else {
                    Object this$name = this.getName();
                    Object other$name = other.getName();
                    if (this$name == null) {
                        if (other$name != null) {
                            return false;
                        }
                    } else if (!this$name.equals(other$name)) {
                        return false;
                    }
    
                    return true;
                }
            }
        }
    
        protected boolean canEqual(Object other) {
            return other instanceof TestDto;
        }
    
        public int hashCode() {
            int PRIME = true;
            int result = 1;
            int result = result * 59 + this.getId();
            Object $name = this.getName();
            result = result * 59 + ($name == null ? 43 : $name.hashCode());
            return result;
        }
    
        public String toString() {
            return "TestDto(id=" + this.getId() + ", name=" + this.getName() + ")";
        }
    }
    

    大致可以看到加上@Data注解,编译后,生成所有字段的set、get方法,重写了toString、hashCode、equals几个方法。

    @Getter与@Setter
    @Setter
    @Getter
    public class TestDto {
        private int id;
        private String name;
    }
    

    来来编译后的代码

    public class TestDto {
        private int id;
        private String name;
    
        public TestDto() {
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getId() {
            return this.id;
        }
    
        public String getName() {
            return this.name;
        }
    }
    

    很明显就是生成各个字段的get、set方法

    @ToString
    @ToString
    public class TestDto {
        private int id;
        private String name;
    }
    

    来看看编译后的代码

    public class TestDto {
        private int id;
        private String name;
    
        public TestDto() {
        }
    
        public String toString() {
            return "TestDto(id=" + this.id + ", name=" + this.name + ")";
        }
    }
    

    @ToString作用就是重写ToString方法

    @NoArgsConstructor、@AllArgsConstructor

    构造器相关的主要有这么几个

    @NoArgsConstructor
    @AllArgsConstructor
    public class TestDto {
        private int id;
        private String name;
    }
    

    看看编译后的代码

    public class TestDto {
        private int id;
        private String name;
    
        public TestDto() {
        }
    
        public TestDto(int id, String name) {
            this.id = id;
            this.name = name;
        }
    }
    

    @NoArgsConstructor、@AllArgsConstructor两个注解分别代表无参构造函数、与全部参数的构造函数

    Lombok简介与使用,就先为大家说到这里,欢迎大家来交流,指出文中一些说错的地方,让我加深认识,愿大家没有bug,谢谢!

    相关文章

      网友评论

        本文标题:Lombok简介与使用

        本文链接:https://www.haomeiwen.com/subject/bqeorhtx.html