一、介绍

  Lombok官网:https://projectlombok.org/

  Lombok的功能简单一点说,就是可以帮我们生成一些代码,这些代码并不是在源码(source code)体现出来的,而是在字节码文件中。

  比如我们创建一个简单的pojo,需要生成有参构造函数、无参构造函数、getter、setter、toString、hashCode、equals这些个方法,虽然通过IDE也是可以生成代码的,但是,利用IDE生成的代码有个问题:代码量大、如果修改属性名后,这些方法基本都得重新生成,不咋方便。

  Lombox的功能:可以为我们生成上面说的那些方法,只需要我们在类名上使用相关注解即可。

二、导入jar包

  这里使用Maven来导入依赖:

  1. <dependency>
  2. <groupId>org.projectlombok</groupId>
  3. <artifactId>lombok</artifactId>
  4. <version>1.18.8</version>
  5. <scope>provided</scope>
  6. </dependency>

  注意,maven引入依赖是,scope是provided,也就是说,lombok包在运行时是不需要的,主要是在编译的时候使用。

三、创建简单pojo

  这里举个简单的示例,就创建一个Person类:

  1. import lombok.AllArgsConstructor;
  2. import lombok.EqualsAndHashCode;
  3. import lombok.NoArgsConstructor;
  4. import lombok.ToString;
  5.  
  6. // 注意下面使用的几个注解,都是Lombok提供的
  7. @NoArgsConstructor
  8. @AllArgsConstructor
  9. @ToString
  10. @EqualsAndHashCode
  11. public class Person {
  12.  
  13. // 创建三个属性
  14. private Integer id;
  15. private String name;
  16. private String addr;
  17.  
  18. // 没有使用IDE进行代码生成,编译源码时,Lombok会自动在字节码中生成方法(前面注解指定的那些方法)
  19. }

  

  生成的代码如下:

  1. public class Person {
  2. private Integer id;
  3. private String name;
  4. private String addr;
  5.  
  6. public Person() {
  7. }
  8.  
  9. public Person(final Integer id, final String name, final String addr) {
  10. this.id = id;
  11. this.name = name;
  12. this.addr = addr;
  13. }
  14.  
  15. public String toString() {
  16. return "Person(id=" + this.id + ", name=" + this.name + ", addr=" + this.addr + ")";
  17. }
  18.  
  19. public boolean equals(final Object o) {
  20. // 会调用下面canEqual方法
  21. }
  22.  
  23. protected boolean canEqual(final Object other) {
  24. return other instanceof Person;
  25. }
  26.  
  27. public int hashCode() {
  28. // 计算出hashCode
  29. }
  30. }

  

四、Lombok常用的注解

  下面是Lombok常用的注解:

  1. @NoArgsConstructor // 生成无参构造函数
  2. @AllArgsConstructor // 生成包含所有属性的有参构造函数
  3. @ToString // 生成toString方法
  4. @EqualsAndHashCode // 生成equals和hashCode方法
  5. @Getter // 为所有字段生成getter
  6. @Setter // 为所有字段生成setter
  7. @Data // 等价于 @NoArgsConstructor + @Getter + @Setter + @EqualsAndHashCode + @ToString
  8. @Slf4j // 自动生成log对象
  9. @Builder // 生成Builder代码(非Builder设计模式)

  

五、进行测试

  创建测试类:

  1. package cn.ganlixin.pojo;
  2.  
  3. import org.junit.Test;
  4.  
  5. public class TestPerson {
  6.  
  7. @Test
  8. public void testCreatePerson() {
  9. // 虽然IDE提示下面的构造函数有错误,但是执行的时候,并不会报错,而是会正常运行
  10. Person person = new Person(1, "ganlixin", "beijing");
  11. System.out.println(person);
  12. // 输出 Person(id=1, name=ganlixin, addr=beijing)
  13. // 说明有参构造函数和toString方法已经生成了
  14. }
  15. }

 

六、解决IDEA提示Lombok生成方法未定义的问题

6.1、问题描述

  因为我们在使用Lombok的时候,Lombok为我们生成的代码是在字节码中(*.class),而不是在source code中,所以存在IDE提示Lombok生成的方法未定义的错误,导致项目不能正常编译,但是我们都知道,这是没问题的,只是IDE的问题。

  比如,使用@Setter来注解一个类的时候,我们可以免于手动写或者利用IDE生成每个属性的Setter方法,因为Lombok会为在编项目的时候,扫描到@Setter方法,就会在字节码中为属性生成setter方法。但是,我们在代码中调用一个该类实例对象的setter方法的时候,IDE就会提示没有定义该方法,其实IDE也没有错,只是他不是根据字节码中的方法来判断的。  

6.2、IDEA插件库安装

   步骤:打开IDEA -->  打开Preferences --> 选择Plugins,如下图

  

  安装Lombok插件后,重启IDEA即可。

6.3、下载插件安装(针对IDEA)

  如果在插件库中没有搜到Lombok,可以去通过本地安装的方式,按照下面的步骤进行操作:

  地址:https://github.com/mplushnikov/lombok-intellij-plugin/releases

  根据版本下载一个zip包即可。

  启动IDEA,打开preferences,建议在IDEA的启动界面打开preferences进行设置,因为这样设置后是全局的,每个项目都可以使用。

  

  选择Plugins

  

  

  打开右边的设置,选择Install Plugin from Disk

  然后选择第一步下载的zip包,点击确认即可。

  

  进入到Plugins,重启IDEA即可

  点击Installed,可以看到上一步安装的Lombok插件

  

 

学习使用Lombok生成代码的更多相关文章

  1. 解决IDEA中Lombok生成代码后提示错误的问题

    一.背景介绍 因为我们在使用Lombok的时候,Lombok为我们生成的代码是在字节码中(*.class),而不是在source code中,所以存在IDE提示Lombok生成的方法未定义的错误,导致 ...

  2. ASP.NET MVC 5 学习教程:生成的代码详解

    原文 ASP.NET MVC 5 学习教程:生成的代码详解 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 ...

  3. (转)MyBatis框架的学习(七)——MyBatis逆向工程自动生成代码

    http://blog.csdn.net/yerenyuan_pku/article/details/71909325 什么是逆向工程 MyBatis的一个主要的特点就是需要程序员自己编写sql,那么 ...

  4. [goa]golang微服务框架学习(二)-- 代码自动生成

    之前用过go语言的反射来做一些代码生成,参考这篇. 但是这种方式,入侵太强,需要执行对应的申明调用, 所以对GOA框架的自动生成非常感兴趣,于是仔细研究了一下,发现用的比较巧妙, 这里先卖个关子,先看 ...

  5. springboot学习随笔(四):Springboot整合mybatis(含generator自动生成代码)

    这章我们将通过springboot整合mybatis来操作数据库 以下内容分为两部分,一部分主要介绍generator自动生成代码,生成model.dao层接口.dao接口对应的sql配置文件 第一部 ...

  6. 【MyBatis学习15】MyBatis的逆向工程生成代码

    1. 什么是逆向工程 mybatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表自动生成mybatis执行所需 ...

  7. 前端学习笔记系列一:7 在vscode中根据vue等模板生成代码

    目标:希望每次新建.vue文件后,VSCODE能够根据配置,自动生成我们想要的内容. 方法:打开VSCODE编辑器,依次选择“文件 -> 首选项 -> 用户代码片段”,此时,会弹出一个搜索 ...

  8. java版gRPC实战之一:用proto生成代码

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  9. Android注解使用之通过annotationProcessor注解生成代码实现自己的ButterKnife框架

    前言: Annotation注解在Android的开发中的使用越来越普遍,例如EventBus.ButterKnife.Dagger2等,之前使用注解的时候需要利用反射机制势必影响到运行效率及性能,直 ...

随机推荐

  1. 二、Linux_系统信息查看

    系统信息查看 1. Linux查看cpu核数等信息: [root@tdh01 ~]# grep 'physical id' /proc/cpuinfo | sort -u # 查看物理cpu个数 ph ...

  2. jmeter+nmon+crontab简单的执行接口定时压测

    一.概述 临时接到任务要对系统的接口进行压测,上面的要求就是:压测,并发2000 在不熟悉系统的情况下,按目前的需求,需要做的步骤: 需要有接口脚本 需要能监控系统性能 需要能定时执行脚本 二.观察 ...

  3. Codeforces D. Little Elephant and Interval(思维找规律数位dp)

    题目描述: Little Elephant and Interval time limit per test 2 seconds memory limit per test 256 megabytes ...

  4. python学习类与方法的调用规则

    1类方法的特点是类方法不属于任何该类的对象,只属于类本身 2类的静态方法类似于全局函数,因为静态方法既没有实例方法的self参数也没有类方法的cls参数,谁都可以调用 3.实例方法只属于实例,是实例化 ...

  5. netstat -an unix socket 会阻塞吗

    [lyd@localhost ~]$ netstat -an | grep "SOFO"unix 2 [ ACC ] SEQPACKET LISTENING 86308 @*MY- ...

  6. JQuery系列(3) - 工具方法

    jQuery函数库提供了一个jQuery对象(简写为$),这个对象本身是一个构造函数,可以用来生成jQuery对象的实例.有了实例以后,就可以调用许多针对实例的方法,它们定义jQuery.protot ...

  7. 应用安全测试技术DAST、SAST、IAST对比分析【转】

    转自:https://blog.csdn.net/qq_29277155/article/details/92411079 一.全球面临软件安全危机 2010年,大型社交网站rockyou.com被曝 ...

  8. js实现文字上下滚动效果

    大家都知道,做html页面时,为了提升网页的用户体验,我们需要在网页中加入一些特效,比如单行区域文字上下滚动就是经常用到的特效.如下图示效果: <html> <head> &l ...

  9. volatile 关键词

    volatile 关键字指示一个字段可以由多个同时执行的线程修改. 出于性能原因,编译器,运行时系统甚至硬件都可能重新排列对存储器位置的读取和写入. 声明了 volatile 的字段不进行这些优化.这 ...

  10. LightOJ - 1333 - Grid Coloring

    链接: https://vjudge.net/problem/LightOJ-1333 题意: You have to color an M x N two dimensional grid. You ...