今天看到有代码中的Dao包中的类文件,写的极其简洁,甚至引起了开发工具InteliJ的报错,然后程序还能稳健地跑起来。

1

2

3

4

5

6

7

8

9

import lombok.Data;

@Data

public class VaildCode {

    private String  code;

    private long    expTime;

}

原来是这个类加了@Data注解,所有Java代码中不需要生成getters and setters,而在编译的时候会自动生成getters and setters

点击导入的包,查看到如下

查看到pom.xml文件中,对应的依赖是

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency>常用的注解如下==

lombok

https://projectlombok.org/

工作的原理分析,以Oracle的javac编译工具为例。
自从Java 6起,javac就支持“JSR 269 Pluggable Annotation Processing API”规范,只要程序实现了该API,就能在javac运行的时候得到调用。
举例来说,现在有一个实现了”JSR 269 API”的程序A,那么使用javac编译源码的时候具体流程如下:

javac对源代码进行分析,生成一棵**抽象语法树(AST) **
运行过程中调用实现了”JSR 269 API”的A程序
此时A程序就可以完成它自己的逻辑,包括修改第一步骤得到的抽象语法树(AST)
javac使用修改后的抽象语法树(AST)生成字节码文件

所以lombok本质上就是这样的一个实现了”JSR 269 API”的程序。在使用javac的过程中,结合官方说明,它编译的流程如下:

javac对源代码进行分析,生成一棵**抽象语法树(AST)****
运行过程中调用实现了”JSR 269 API”的lombok程序
此时lombok就对第一步骤得到的AST进行处理,找到@Data注解所在类对应的语法树(AST),然后修改该语法树(AST),增加getter和setter方法定义的相应树节点
javac使用修改后的抽象语法树(AST)生成字节码文件

优点:

能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,提高了一定的开发效率
让代码变得简洁,不用过多的去关注相应的方法
属性做修改时,也简化了维护为这些属性所生成的getter/setter方法等

缺点:

不支持多种参数构造器的重载
虽然省去了手动创建getter/setter方法的麻烦,但大大降低了源代码的可读性和完整性,降低了阅读源代码的舒适度

lombok的实现:就是元注解出现后注解运行生命周期里面的编译周期,这个就是 JSR 269 Pluggable Annotation Processing API,就是源代码在编译成字节码的时候修改了语法树的节点规则进行了加强生成,
以后可以更加快捷的敲代码了。

知乎上对lombok插件得看法也两极化,有人觉得简化代码,阅读代码更舒适;也有人极其反对

只能说爱用不用,不用别诋毁。别人用了至少你要看得懂。

------------------------- A little Progress a day makes you a big success... ----------------------------

来源:https://www.cnblogs.com/qianjinyan/p/9576939.html

lombok 中的@Data注解相关推荐

  1. lombok中的@Data注解与MyBatis的懒加载机制冲突解决

    使用@Data注解与mybatis的懒加载机制实现一对一关系查询时,发现怎么配置都无效,就是一下都查出来了,根本没有懒加载 1.application.yml配置文件配置如下: # mybatis 配 ...

  2. Spring Boot中Spring data注解的使用

    文章目录 Spring Data Annotations @Transactional @NoRepositoryBean @Param @Id @Transient @CreatedBy, @Las ...

  3. lombok中的builder注解居然是一种设计模式:让我们了解一下超级实用的“建造者模式”吧

    lombok中的builder注解本质上是为你生成了一个构造器Builder类,通过这个类我们可以构造出带此注解的对象.本质上它实现了设计模式中一种经典的模式:建造者模式 1.认识: ①一句话来说:封 ...

  4. Lombok中关于@Data的使用

    当你在使用 Lombok 的 @Data 注解时,其实会有一些坑需要关注,今天就让我们来见识一下. <!-- more --> Lombok 先来简单介绍一下 Lombok ,其官方介绍如 ...

  5. IDEA lombok包的@Data注解报错找不到符号

    问题描述: 工程编译报错 java:找不到符号 问题抽象 定位错误可以发现是getter setter的问题 由于采用了@Data注解,所以优先考虑是lombok的问题 解决方案 首先排除以下可能 l ...

  6. idea编辑器中使用@Data注解无效解决办法

    使用@Data注解可以减少了以前的get和set等方法,但是在idea编辑器中不认识会在使用实体类元素时候找不到(但是运行不会报错) 所以可以添加插件

  7. 关于lombok中的Builder注解解析

    文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼:我热爱编程.热爱算法.热爱开源.所有源码在我的个人github :这博客是记录我学习的点点滴滴,如果您对 Python.Java.AI ...

  8. 18.案例实战:体验lombok的核心@Data和@Slf4j注解

    代码:https://github.com/NIGHTFIGHTING/spring_boot_learning/tree/master/18/agan-boot/agan-boot-lombok 添 ...

  9. Lombok中@Data注解 @ToString注解 @NoArgsConstructo注解 @AllArgsConstructor注解

    1:项目中引入依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok ...

最新文章

  1. 微软MCITP系列课程
  2. Java http协议概述
  3. Android 软键盘弹出时把布局顶上去,控件乱套解决方法
  4. HttpClient模拟http请求
  5. Android中多媒体处理【转】
  6. Visual Studio Styles
  7. python判断性别程序_python 实现性别识别
  8. RTX5 | 线程标志组02 - 获取线程标志与清除线程标志
  9. Dell Chromebook11 刷Ubuntu
  10. 贺利坚老师汇编课程28笔记:在代码段使用数据加个标号start
  11. C++是C语言演变过来的,为何不能代替C语言?
  12. python ssd目标检测_基于自注意力的SSD图像目标检测算法
  13. 全文检索Solr面试题集锦:项目实战VS理论知识
  14. blob jdbc mysql_JDBC中级篇(MYSQL)——处理文件(BLOB)
  15. VTK实现三维地质建模
  16. T5557卡读、写及EM4100 ID、HID卡复制函数说明
  17. 聆秘2013手游渠道之争:四大战役谁主沉浮?
  18. UI设计师=美工?不同是人眼里UI设计师~
  19. 第二十三章 Unity 材质
  20. 2022新版海螺影视主题模板M3.1全解密版本多功能苹果CMSv10后台自适应主题

热门文章

  1. QT的QListWidget类的使用
  2. C++ 文件和文件流
  3. pytroch 数据增量 transforms的二十二个方法
  4. QT Creater/VS2013的使用(快捷键,调试等)
  5. Oracle中PLSQL中if语句的写法
  6. 【tensorflow】model.fit() fit函数
  7. 商品品牌信息的增删改查操作步骤_javaweb09-Servlet增删改查
  8. linux内核之内存管理.doc,linux内核之内存管理.doc
  9. 颠覆传统4S店,特斯拉发布智能售后服务体系
  10. 汇编语言实验 3 编程、编译、连接、跟踪