说道Lombok,可能会鲜为人知。但是在实际的开发中,它起到了很大的作用,话不多说,直入正题:

一、Lombok是什么

现在看一下Lombok官方对其进行的解释:Lombok官网:https://projectlombok.org

第一句话,Lombok项目是一种自动接通你的编辑器和构建工具的一个Java库。接着,不用再一次写额外的getter或者equals方法。翻译到这里其实就可以,后面是对Lombok早期应用的介绍。通过这两句话不难理解lombok其实就是帮助我们编写getter或者equals方法的一个“工具”。其实他的魅力并不在于帮助我们简单的编写对应的getter或者更多的方法,还有一点在于,当我们的字段发生改变时,lombok也会对相应的getter方法进行改变。

二、为什么要在自己的项目中使用Lombok

要回答这个问题,仅仅知道什么是Lombok是不够的。在讲解原理之前我想再提一点 ,这也是为什么要使用Lombok的关键所在:根据Lombok的使用规则,如果想要使用Lombok就需要删除在项目中(JavaBean)存在的已经生成的getter方法setter方法以及equals和hash方法,当然Lombok也提供了对打印日志的处理。这样在使用Lombok以后就会大大减少项目中的代码量,同时由于Lombok有自动修改的功能,这也提供了项目中代码的执行效率。

综上所述,使用Lombok的两点主要原因就是:

(1)、简化冗余的JavaBean代码;

(2)、大大提高JavaBean中方法的执行效率;

三、如何使用LomBok

在Lombok的官网中,有一个install选项,我们点开它会看到多种安装方式:

大家可以根据自己的项目需求来选择使用哪种方式,这里以Maven为例:

点击Maven会看到一组坐标:

根据它的提示我们将这一组坐标添加到我们的pom文件中:

添加进去以后点击import change,等待Idea把jar包下载完就可以在项目中使用了。

四、Lombok实现原理

Lombok实现了JSR 269 API规范,javac在Java6开始支持这一规范,只要程序实现了该API,就能在javac运行的时候得到调用,那么Lombok在编译时使用的就是javac,具体流程如下:

首先是项目的源代码文件,在经过编译处理以后,lombok会使用自己的抽象语法树去进行注解的匹配,如果在项目中的某一个类中使用了lombok中的注解,那么注解编译器就会自动去匹配项目中的注解对应到在lombok语法树中的注解文件,并经过自动编译匹配来生成对应类中的getter或者setter方法,达到简化代码的目的。执行顺序就如上图的叠放顺序。

五、Lombok注解详解

Lombok主要常用的注解有:@Data,@getter,@setter,@NoArgsConstructor,@AllArgsConstructor,@ToString,@EqualsAndHashCode,@Slf4j,@Log4j。我们一个一个来看:

@Data注解:在JavaBean或类JavaBean中使用,这个注解包含范围最广,它包含getter、setter、NoArgsConstructor注解,即当使用当前注解时,会自动生成包含的所有方法;

@getter注解:在JavaBean或类JavaBean中使用,使用此注解会生成对应的getter方法;

@setter注解:在JavaBean或类JavaBean中使用,使用此注解会生成对应的setter方法;

@NoArgsConstructor注解:在JavaBean或类JavaBean中使用,使用此注解会生成对应的无参构造方法;

@AllArgsConstructor注解:在JavaBean或类JavaBean中使用,使用此注解会生成对应的有参构造方法;

@ToString注解:在JavaBean或类JavaBean中使用,使用此注解会自动重写对应的toStirng方法;

@EqualsAndHashCode注解:在JavaBean或类JavaBean中使用,使用此注解会自动重写对应的equals方法和hashCode方法;

@Slf4j:在需要打印日志的类中使用,当项目中使用了slf4j打印日志框架时使用该注解,会简化日志的打印流程,只需调用info方法即可;

@Log4j:在需要打印日志的类中使用,当项目中使用了log4j打印日志框架时使用该注解,会简化日志的打印流程,只需调用info方法即可;

在使用以上注解需要处理参数时,处理方法如下(以@ToString注解为例,其他注解同@ToString注解):

@ToString(exclude="column")

意义:排除column列所对应的元素,即在生成toString方法时不包含column参数;

@ToString(exclude={"column1","column2"})

意义:排除多个column列所对应的元素,其中间用英文状态下的逗号进行分割,即在生成toString方法时不包含多个column参数;

@ToString(of="column")

意义:只生成包含column列所对应的元素的参数的toString方法,即在生成toString方法时只包含column参数;;

@ToString(of={"column1","column2"})

意义:只生成包含多个column列所对应的元素的参数的toString方法,其中间用英文状态下的逗号进行分割,即在生成toString方法时只包含多个column参数;

六、使用Lombok可能需要注意的地方

(1)、当你的IDE是Idea时,要注意你的Idea是支持Lombok的,如果不支持请更换2017版本尝试。

(2)、在使用Lombok时,你的编辑器可能会报错,这时请在你的IDE中安装Lombok插件(如果使用的Idea则直接搜索Lombok插件,选择星级最高的,直接安装就是,其他Ide类同)。

(3)、参数的处理往往都是根据项目需求来进行,请妥善处理参数。

(4)、如果你无法访问Lombok官网,你可以从这篇博文中将Maven坐标照着自己打进去,或者你也可以访问Maven的中央仓库搜索Lombok,将Maven坐标复制进去即可。
---------------------

原文出处:https://blog.csdn.net/qq_36314960/article/details/79565899

Lombock原理的更多相关文章

  1. 奇异值分解(SVD)原理与在降维中的应用

    奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域.是 ...

  2. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  3. 线性判别分析LDA原理总结

    在主成分分析(PCA)原理总结中,我们对降维算法PCA做了总结.这里我们就对另外一种经典的降维方法线性判别分析(Linear Discriminant Analysis, 以下简称LDA)做一个总结. ...

  4. [原] KVM 虚拟化原理探究(1)— overview

    KVM 虚拟化原理探究- overview 标签(空格分隔): KVM 写在前面的话 本文不介绍kvm和qemu的基本安装操作,希望读者具有一定的KVM实践经验.同时希望借此系列博客,能够对KVM底层 ...

  5. H5单页面手势滑屏切换原理

    H5单页面手势滑屏切换是采用HTML5 触摸事件(Touch) 和 CSS3动画(Transform,Transition)来实现的,效果图如下所示,本文简单说一下其实现原理和主要思路. 1.实现原理 ...

  6. .NET Core中间件的注册和管道的构建(1)---- 注册和构建原理

    .NET Core中间件的注册和管道的构建(1)---- 注册和构建原理 0x00 问题的产生 管道是.NET Core中非常关键的一个概念,很多重要的组件都以中间件的形式存在,包括权限管理.会话管理 ...

  7. python自动化测试(2)-自动化基本技术原理

    python自动化测试(2) 自动化基本技术原理 1   概述 在之前的文章里面提到过:做自动化的首要本领就是要会 透过现象看本质 ,落实到实际的IT工作中就是 透过界面看数据. 掌握上面的这样的本领 ...

  8. CRC、反码求和校验 原理分析

    3月份开始从客户端转后台,算是幸运的进入全栈工程师的修炼阶段.这段时间一边是老项目的客户端加服务器两边的维护和交接,一边是新项目加加加班赶工,期间最长经历了连续工作三天只睡了四五个小时的煎熬,人生也算 ...

  9. 菜鸟学Struts2——Struts工作原理

    在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...

随机推荐

  1. [JZOJ3234] 阴阳

    题目 题目大意 有一棵树,每条边有\(0\)或\(1\)两种颜色. 求满足存在\((u,v)\)路径上的点\(x\)使得\((u,x)\)和\((x,v)\)路径上的两种颜色出现次数相同的点对\((u ...

  2. BZOJ 1296(SCOI 2009) 粉刷匠

    1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2544 Solved: 1466 [Submit][Statu ...

  3. SpringBoot_03_SpringBoot对其他技术的整合

    1.SpringBoot整合Mybatis 1.2 添加Mybatis的起步依赖 <!--mybatis起步依赖--> <dependency> <groupId> ...

  4. 尚学linux课程---3、linux网络说明

    尚学linux课程---3.linux网络说明 一.总结 一句话总结: 如果NAT模式:linux,VMnet8,虚拟出来的路由器 要在同一个网段, 那么 linux才能 通过 网络地址转换 经过wi ...

  5. Docker系列(七):Docker图形化管理和监控

    Docker管理工具之官方三剑客 Docker Machine是什么鬼 从前 现在 你需要登录主机,按照主机及操作系统特有的安装以及配置步骤安装Docker,使其 能运行Docker容器. Docke ...

  6. CSS表格属性

    border-collapse:表格边框线合并,取值:collapse.

  7. day23_5_练习_Calculator_使用正则表达式计算复杂表达式

    #!/usr/bin/env python# -*- coding:utf-8 -*-# ------------------------------------------------------- ...

  8. WannaCry结束了? 安专家注册域名掐断病毒传播

    腾讯科技讯,(韩依民) 5 月 13 日,席卷全球的勒索病毒 WannaCry(也被称作 WanaCrypt 或 WCry),在今日晚间被互联网安全人员找到阻止其传播的方法. 据北京云纵信息技术有限公 ...

  9. 第四周课堂笔记2th

    2. 在函数中*对于形参的作用是聚合,对于实参的作用是打散 3. 加载顺序:内置——全局——局部空间 取值顺序:局部——全局——内置空间 左上角的答案: 123 666 888 777 右边的答案:7 ...

  10. WPF DataGridTextColum 显示时间格式化

    <DataGrid Name="DGVisit" Grid.Row="2" AutoGenerateColumns="False" C ...