千家信息网

Java的Lombok如何使用

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容主要讲解"Java的Lombok如何使用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Java的Lombok如何使用"吧!1)引入相应的maven
千家信息网最后更新 2026年11月03日Java的Lombok如何使用

本篇内容主要讲解"Java的Lombok如何使用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Java的Lombok如何使用"吧!

1)引入相应的maven包:

    org.projectlombok    lombok    1.16.18    provided  

Lombok的scope=provided,说明它只在编译阶段生效,不需要打入包中。事实正是如此,Lombok在编译期将带Lombok注解的Java文件正确编译为完整的Class文件。

2)添加IDE工具对Lombok的支持:

IDEA中引入Lombok支持如下:

  • 点击File-- Settings设置界面,安装Lombok插件:

  • 点击File-- Settings设置界面,开启Annocation Processors:

开启该项是为了让Lombok注解在编译阶段起到作用。

Eclipse的Lombok插件安装可以自行百度,也比较简单,值得一提的是,由于Eclipse内置的编译器不是Oracle javac,而是eclipse自己实现的Eclipse Compiler for Java (ECJ).要让ECJ支持Lombok,需要在eclipse.ini配置文件中添加如下两项内容:

-Xbootclasspath/a:[lombok.jar所在路径]

-javaagent:[lombok.jar所在路径]

3)Lombok实现原理:

自从Java 6起,javac就支持"JSR 269 Pluggable Annotation Processing API"规范,只要程序实现了该API,就能在javac运行的时候得到调用。

Lombok就是一个实现了"JSR 269 API"的程序。在使用javac的过程中,它产生作用的具体流程如下:

  • javac对源代码进行分析,生成一棵抽象语法树(AST)

  • javac编译过程中调用实现了JSR 269的Lombok程序

  • 此时Lombok就对第一步骤得到的AST进行处理,找到Lombok注解所在类对应的语法树(AST),然后修改该语法树(AST),增加Lombok注解定义的相应树节点

  • javac使用修改后的抽象语法树(AST)生成字节码文件

4) Lombok注解的使用:

POJO类常用注解:

@Getter/@Setter: 作用类上,生成所有成员变量的getter/setter方法;作用于成员变量上,生成该成员变量的getter/setter方法。可以设定访问权限及是否懒加载等。

package com.trace;  import lombok.AccessLevel;  import lombok.Getter;  import lombok.Setter;  /**   * Created by Trace on 2018/5/19.
* DESC: 测试类 */ @SuppressWarnings("unused") public class TestClass { public static void main(String[] args) { } @Getter(value = AccessLevel.PUBLIC) @Setter(value = AccessLevel.PUBLIC) public static class Person { private String name; private int age; private boolean friendly; } public static class Animal { private String name; private int age; @Getter @Setter private boolean funny; } }

在Structure视图中,可以看到已经生成了getter/setter等方法:

编译后的代码如下:[这也是传统Java编程需要编写的样板代码]

//  // Source code recreated from a .class file by IntelliJ IDEA  // (powered by Fernflower decompiler)  //  package com.trace;  public class TestClass {      public TestClass() {      }      public static void main(String[] args) {      }      public static class Animal {          private String name;          private int age;          private boolean funny;          public Animal() {          }          public boolean isFunny() {              return this.funny;          }          public void setFunny(boolean funny) {              this.funny = funny;          }      }      public static class Person {          private String name;          private int age;          private boolean friendly;          public Person() {          }          public String getName() {              return this.name;          }          public int getAge() {              return this.age;          }          public boolean isFriendly() {              return this.friendly;          }          public void setName(String name) {              this.name = name;          }          public void setAge(int age) {              this.age = age;          }          public void setFriendly(boolean friendly) {              this.friendly = friendly;          }      }  }

@ToString:作用于类,覆盖默认的toString()方法,可以通过of属性限定显示某些字段,通过exclude属性排除某些字段。

@EqualsAndHashCode:作用于类,覆盖默认的equals和hashCode

@NonNull:主要作用于成员变量和参数中,标识不能为空,否则抛出空指针异常。

@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor:作用于类上,用于生成构造函数。有staticName、access等属性。

staticName属性一旦设定,将采用静态方法的方式生成实例,access属性可以限定访问权限。

@NoArgsConstructor:生成无参构造器;

@RequiredArgsConstructor:生成包含final和@NonNull注解的成员变量的构造器;

@AllArgsConstructor:生成全参构造器。

编译后结果:

public static class Person {      @NonNull      private String name;      private int age;      private boolean friendly;      public String toString() {          return "TestClass.Person(name=" + this.getName() + ", age=" + this.getAge() + ")";      }      @NonNull      public String getName() {          return this.name;      }      public int getAge() {          return this.age;      }      public boolean isFriendly() {          return this.friendly;      }      public void setName(@NonNull String name) {          if(name == null) {              throw new NullPointerException("name");          } else {              this.name = name;          }      }      public void setAge(int age) {          this.age = age;      }      public void setFriendly(boolean friendly) {          this.friendly = friendly;      }      private Person() {      }      private static TestClass.Person of() {          return new TestClass.Person();      }     @ConstructorProperties({"name"})      Person(@NonNull String name) {          if(name == null) {              throw new NullPointerException("name");          } else {              this.name = name;          }      }      @ConstructorProperties({"name", "age", "friendly"})      public Person(@NonNull String name, int age, boolean friendly) {          if(name == null) {              throw new NullPointerException("name");         } else {              this.name = name;              this.age = age;              this.friendly = friendly;          }      }  }

@Data:作用于类上,是以下注解的集合:@ToString @EqualsAndHashCode @Getter @Setter @RequiredArgsConstructor

@Builder:作用于类上,将类转变为建造者模式

@Log:作用于类上,生成日志变量。针对不同的日志实现产品,有不同的注解:

其他重要注解:

@Cleanup:自动关闭资源,针对实现了java.io.Closeable接口的对象有效,如:典型的IO流对象

编译后结果如下:

是不是简洁了太多。

@SneakyThrows:可以对受检异常进行捕捉并抛出,可以改写上述的main方法如下:

@Synchronized:作用于方法级别,可以替换synchronize关键字或lock锁,用处不大。

到此,相信大家对"Java的Lombok如何使用"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

作用 生成 注解 方法 编译 变量 属性 成员 文件 语法 支持 内容 所在 程序 构造器 不同 代码 字段 对象 插件 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 什么是科技互联网 上海睿民互联网科技有限公司 科技类互联网 互联网科技小贷 善班互联网科技 互联网未来科技 万达互联网科技 顺网科技2021年互联网排名 卫星互联网科技股票 云创客互联网科技公司 央行互联网金融科技公司 互联网为啥属于高科技 国大互联网教育科技有限公司薪资 银行科技岗属于互联网吗 深圳无忧互联网科技 从那以后互联网科技有限公司 互联网科技包装股份有限公司上市 陕西九四连强互联网科技有限公司 米泉互联网科技专业怎么样 山东亿川互联网科技有限责任公司 上海睿民互联网科技有限公司 贷财互联网科技 互联网科技的未来发展 哈尔滨秒房互联网科技有限公司 贵州叶脉互联网科技有限公司所属行业 武汉健翔互联网络科技有限公司 移动互联网年度科技创新 新兴科技互联网创新大赛颁奖典礼 深圳育鹏互联网科技有限公司招聘 互联网数据科技专业
0