1、Lombok的介绍

Lombok是一款Java开发插件,使得Java开发者可以通过其定义的一些注解来消除业务工程中冗长和繁琐的代码,尤其对于简单的Java模型对象(POJO)。在开发环境中使用Lombok插件后,Java开发人员可以节省出重复构建,诸如hashCodeequals这样的方法以及各种业务对象模型的accessorToString等方法的大量时间。对于这些方法,它能够在编译源代码期间自动帮我们生成这些方法,并没有如反射那样降低程序的性能。

2、Lombok的安装

注意 :主要基于IDEA开发软件(也不是安装,只是添加插件或依赖)

如何找到如下图的插件:Files->Settings->Plugins,然后搜索Lombok

另外需要注意的是,在使用lombok注解的时候记得要导入lombok.jar包到工程,如果使用的是Maven的工程项目的话,要在其pom.xml中添加依赖如下:

<!--版本申明-->
<lombok.version>1.6.18</lombok.version>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>${lombok.version}</version>
    <scope>provided</scope>
</dependency>

3、Lombok实现原理分析

1、其开发是遵循JSR 269 Pluggable Annotation Processing API
2、而javacjava6开始支持“JSR 269 API”规范;
3、即只要程序实现了该API,就能在javac运行的时候得到调用;
4、Lombok实现了“JSR 269 API”。

在编译时,javac编译源码的具体流程如下:

4、Lombok使用方法

Lombok能以简单的注解形式来简化java代码,提高开发人员的开发效率。例如开发中经常需要写的javabean,都需要花时间去添加相应的getter/setter,也许还要去写构造器、equals等方法,而且需要维护,当属性多时会出现大量的getter/setter方法,这些显得很冗长也没有太多技术含量,一旦修改属性,就容易出现忘记修改对应方法的失误。

Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setterequalshashcodetoString方法。出现的神奇就是在源码中没有gettersetter方法,但是在编译生成的字节码文件中有gettersetter方法。这样就省去了手动重建这些代码的麻烦,使代码看起来更简洁些。

4.1、@Data注解

​ @Data注解在类上,会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。

不使用@Data注解代码如下:

package org.mrzhangxd.com.springboot_vue_exam.entry;
/**
 * @Project: springboot_vue_exam
 * @Description:
 * @Package: org.mrzhangxd.com.springboot_vue_exam.entry
 * @Create by 张小东 on 2019/11/24 19:00
 */
public class Admin {
    /** 版本号 */
    private static final long serialVersionUID = -5661933053710306924L;

    /** 管理员ID */
    private Integer adminId;

    /** 管理员姓名 */
    private String adminName;

    /** 管理员性别 */
    private String adminSex;

    /** 管理员电话号码 */
    private String adminTel;

    /** 管理员邮箱 */
    private String adminEmail;

    /** 密码 */
    private String adminPwd;

    /** 身份证号 */
    private String adminCardnum;

    /** 角色(0管理员,1教师,2学生) */
    private String adminRole;

    /**
     * 获取管理员ID
     *
     * @return 管理员ID
     */
    public Integer getAdminId() {
        return adminId;
    }

    /**
     * 设置管理员ID
     *
     * @param adminId
     *          管理员ID
     */
    public void setAdminId(Integer adminId) {
        this.adminId = adminId;
    }

    /**
     * 获取管理员姓名
     *
     * @return 管理员姓名
     */
    public String getAdminName() {
        return this.adminName;
    }
    /**
     * 设置管理员姓名
     *
     * @param adminName
     *          管理员姓名
     */
    public void setAdminName(String adminName) {
        this.adminName = adminName == null ? null : adminName.trim();
    }

    /**
     * 获取管理员性别
     *
     * @return 管理员性别
     */
    public String getAdminSex() {
        return adminSex;
    }

    /**
     * 设置管理员性别
     *
     * @param adminSex
     * 管理员性别
     */
    public void setAdminSex(String adminSex) {
        this.adminSex = adminSex ==  null ? null : adminSex.trim();
    }

    /**
     * 获取管理员电话号码
     *
     * @return 管理员电话号码
     */
    public String getAdminTel() {
        return adminTel;
    }

    /**
     * 设置管理员电话号码
     *
     * @param adminTel
     *          管理员电话号码
     */
    public void setAdminTel(String adminTel) {
        this.adminTel = adminTel == null ? null : adminTel.trim();
    }

    /**
     * 获取管理员邮箱
     *
     * @return 管理员邮箱
     */
    public String getAdminEmail() {
        return this.adminEmail;
    }

    /**
     * 设置管理员邮箱
     *
     * @param adminEmail
     *          管理员邮箱
     */
    public void setAdminEmail(String adminEmail) {
        this.adminEmail = adminEmail == null ? null : adminEmail.trim();
    }

    /**
     * 获取密码
     *
     * @return 密码
     */
    public String getAdminPwd() {
        return adminPwd;
    }

    /**
     * 设置密码
     *
     * @param adminPwd
     *          密码
     */
    public void setAdminPwd(String adminPwd) {
        this.adminPwd = adminPwd == null ? null : adminPwd.trim();
    }

    /**
     * 获取身份证号
     *
     * @return 身份证号
     */
    public String getAdminCardnum() {
        return adminCardnum;
    }

    /**
     * 设置身份证号
     *
     * @param adminCardnum
     *          身份证号
     */
    public void setAdminCardnum(String adminCardnum) {
        this.adminCardnum = adminCardnum == null ? null : adminCardnum.trim();
    }

    /**
     * 获取角色(0管理员,1教师,2学生)
     *
     * @return 角色(0管理员
     */
    public String getAdminRole() {
        return adminRole;
    }

    /**
     * 设置角色(0管理员,1教师,2学生)
     *
     * @param adminRole
     *          角色(0管理员
     */
    public void setAdminRole(String adminRole) {
        this.adminRole = adminRole == null ? null : adminRole.trim();
    }
}

使用@Data注解后代码:

package org.mrzhangxd.com.springboot_vue_exam.entry;

import lombok.Data;
/**
 * @Project: springboot_vue_exam
 * @Description:
 * @Package: org.mrzhangxd.com.springboot_vue_exam.entry
 * @Create by 张小东 on 2019/11/24 19:00
 */
@Data
public class Admin {

    /** 管理员ID */
    private Integer adminId;

    /** 管理员姓名 */
    private String adminName;

    /** 管理员性别 */
    private String adminSex;

    /** 管理员电话号码 */
    private String adminTel;

    /** 管理员邮箱 */
    private String adminEmail;

    /** 密码 */
    private String adminPwd;

    /** 身份证号 */
    private String adminCardnum;

    /** 角色(0管理员,1教师,2学生) */
    private String adminRole;
}

4.2、@Getter/@Setter注解

如果觉得@Data太过残暴(因为@Data集合了@ToString、@EqualsAndHashCode、@Getter/@Setter、@RequiredArgsConstructor的所有特性)不够精细,可以使用@Getter/@Setter注解,此注解在属性上,可以为相应的属性自动生成Getter/Setter方法,示例如下:

package org.mrzhangxd.com.springboot_vue_exam.entry;

import lombok.Setter;
import lombok.getter;
/**
 * @Project: springboot_vue_exam
 * @Description:
 * @Package: org.mrzhangxd.com.springboot_vue_exam.entry
 * @Create by 张小东 on 2019/11/24 19:00
 */
public class Demo1{
    @Getter
    @Setter
    private String username;
    @Getter
    @Setter
    private String password;

    @Override
    public String toString(){
        return String.format(username,password);
    }
}

不使用@Getter/@Setter注解的代码:

package org.mrzhangxd.com.springboot_vue_exam.entry;

import lombok.
/**
 * @Project: springboot_vue_exam
 * @Description:
 * @Package: org.mrzhangxd.com.springboot_vue_exam.entry
 * @Create by 张小东 on 2019/11/24 19:00
 */
 public class Demo{
     /** 用户名*/
     private String username;
     /** 密码*/
     private String password;

     /**
     * 获取用户名
     * @return 用户名
     */
     public String getUsername(){

         return username;

     }

     /**
     * 设置用户名
     *
     * @param Username
     *          用户名
     */
     public void setUsername(String username){

         this.Username = username;

     }
     /**
     * 获取用户密码
     * @return 用户密码
     */
     public String getPassword(){

         return username;

     }

     /**
     * 设置用户密码
     *
     * @param Password
     *          用户密码
     */
     public void setPssword(String password){

         this.Pasword = password;

     }

 }

后续更新... ...

关于Lombok的认识及其应用(一)的更多相关文章

  1. 记录一次bug解决过程:eclipse集成lombok插件

    一 总结 eclipse集成插件lombok: 启动Spring Boot项目: sublime全局搜索关键字:ctrl + shift + F JDK8中的lambda表达式使用 二 BUG描述:集 ...

  2. lombok在IntelliJ IDEA下的使用

    lombok是一款可以精减java代码.提升开发人员生产效率的辅助工具,利用注解在编译期自动生成setter/getter/toString()/constructor之类的代码.代码越少,意味着出b ...

  3. lombok 简化java代码注解

    lombok 简化java代码注解 安装lombok插件 以intellij ide为例 File-->Setting-->Plugins-->搜索"lombok plug ...

  4. Lombok 安装、入门 - 消除冗长的 java 代码

    lombok 提供了简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 java 代码. lombok 的官方网址:http://projectlombok.org/  lombok 安装1. ...

  5. lombok介绍

    Lombok是一种JavaArchive(JAR)文件,可用来消除Java代码的冗长.在写代码时,可以通过这个插件消除各种getter和setter,toString等常用方法. lombok 注解: ...

  6. Lombok简化Java代码

    导包:import lombok.Data; Lombok简化Java代码: 在Lombok中,生成构造方法的annotation一共有三个:@NoArgsConstructor, @Required ...

  7. myeclipse 手动安装 lombok

    1. 将 lombok.jar 复制到 myeclipse.ini / eclipse.ini 所在的文件夹目录下    2. 打开 eclipse.ini / myeclipse.ini,在最后面插 ...

  8. lombok+slf4j+logback SLF4J和Logback日志框架详解

    maven 包依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lomb ...

  9. Java代码简化神器-Lombok

    一.背景 前段时间在开源社区中发现了一个比较牛逼的简化Java代码的神器-Lombok,接着自己写了demo进行测试和练习,感觉真的很不错,特此分享给需要的小伙伴们~ 二.开发之前的准备 1.lomb ...

  10. MyEclipse安装lombok

    1. 将lombok.jar复制到myeclipse.ini所在的文件夹 2. 打开myeclipse.ini,插入以下两行: -Xbootclasspath/a:lombok.jar-javaage ...

随机推荐

  1. JML规格编程系列——OO Unit3分析和总结

    本文是BUAA OO课程Unit3在课程讲授.三次作业完成.自测和互测时发现的问题,以及倾听别人的思路分享所引起个人的一些思考的总结性博客.主要包含JML相关梳理.SMT Solver验证.JML单元 ...

  2. VIM的配置以及插件管理

    VIM的配置详细说明参考:http://www.ruanyifeng.com/blog/2018/09/vimrc.html 此外VIM的插件管理比如 Vundle可以参考这个博客: https:// ...

  3. 用java代码实现构造目录树

    怎么用java代码实现上面这样的目录树? 首先创建数据表 每条数据记录自己的id以及父节点的id 然后进入java代码部分: public String directory(String author ...

  4. scrapy RuntimeError: maximum recursion depth exceeded while calling a Python object 超出python最大递归数异常

    2019-10-21 19:01:00 [scrapy.core.engine] INFO: Spider opened2019-10-21 19:01:00 [scrapy.extensions.l ...

  5. MySQL Binlog--事务日志和BINLOG落盘参数对磁盘IO的影响

    参数说明 innodb_flush_log_at_trx_commit和sync_binlog 两个参数是控制MySQL 磁盘写入策略以及数据安全性的关键参数,不同参数设置对磁盘IO影响不同. 参数i ...

  6. kubernetes 集群添加node节点

    kubernetes 集群添加node节点 注意,我们并不需要把新增的node ip加入到证书里重新生成!!! 下面我们以添加node03为例 一.添加集群里个节点的hostname并设置好对应主机名 ...

  7. js中绑定事件处理函数,使用event以及传递额外数据

    IE8中使用attachEvent绑定事件处理函数时,不能直接向event 对象添加数据属性.可以用属性复制的方法,包装新的event对象. 1. 属性复制var ObjectExtend = fun ...

  8. java基础(9)---静态方法和成员方法

    一.方法:  方法的区别: 静态方法:有static方法 成员方法:没有static方法 方法的定义:  方法的调用:类.静态方法,对象.成员方法 一个MyClass类包含静态方法和成员方法: 静态方 ...

  9. Caused by: java.nio.charset.MalformedInputException: Input length = 1

    java.lang.IllegalStateException: Failed to load property source from location 'classpath:/applicatio ...

  10. 《The One!团队》第八次作业:ALPHA冲刺(四)

    项目 内容 作业所属课程 所属课程 作业要求 作业要求 团队名称 < The One !> 作业学习目标 (1)掌握软件测试基础技术.(2)学习迭代式增量软件开发过程(Scrum) 第四天 ...