文章目录

  • Lombok
    • Lombok插件
    • Lombok依赖
  • Lombok使用
    • @Getter
    • @Setter
    • @NonNull
    • @NoArgsConstructor
    • @AllArgsConstructor
    • @RequiredArgsConstructor
    • @ToString
    • @EqualsAndHashCode
    • @Data
    • @Slf4j
    • @SneakyThrows
  • 最后

Lombok

Lombok是一个可以让Java代码变得更加“简洁”、“快速”的第三方工具。

Lombok一般来说分为两部分,分别是Lombok插件和Lombok依赖,这两者需要配合使用才可以生效,缺一不可。
值得一提的是,Lombok插件和Lombok依赖,在最新版的IDEA和SpringBoot中分别进行了内置,可以让开发者直接使用Lombok。

Lombok插件

Lombok插件在IDEA 2020.3版本中成为了官方内置插件,开发者无需再进行Lombok插件的安装操作了。

如果如果的IDEA版本低于2020.3,可以自己手动在IDEA上进行Lombok插件的安装。

Lombok插件的安装

File -> Settings -> Plugins -> Marketplace -> 在搜索栏中输入Lombok。

Lombok依赖

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.16</version><scope>provided</scope>
</dependency>

Lombok使用

Lombok通过注解的方式,在Java程序编译的时候,为Java代码生成get/set等通用方法,我们可以通过反编译class文件的方法,来查看Lombok的效果。

@Getter

将该注解标识在类上,将会为该类生成get方法。

@Getter
public class User {private String username;
}

反编译class文件,得到的java文件:

public class User {private String username;public User() {}public String getUsername() {return this.username;}
}

@Setter

将该注解标识在类上,将会为该类生成set方法。

@Setter
public class User {private String username;
}

反编译class文件,得到的java文件:

public class User {private String username;public User() {}public void setUsername(final String username) {this.username = username;}
}

@NonNull

将该注解标识在类成员变量上,对该成员变量赋值时,不允许使用null值,如果赋值为null,则抛出异常。

@Setter
public class User {@NonNull private String username;
}

反编译class文件,得到的java文件:

public class User {@NonNullprivate String username;public User() {}public void setUsername(@NonNull final String username) {if (username == null) {throw new NullPointerException("username is marked non-null but is null");} else {this.username = username;}}
}

@NoArgsConstructor

将该注解标识在类上,将会为该类生成无参构造方法。

@NoArgsConstructor
public class User {private String username;
}

反编译class文件,得到的java文件:

public class User {private String username;public User() {}
}

@AllArgsConstructor

将该注解标识在类上,将会为该类生成全参构造方法,如果使用了该注解,类将不会有无参构造方法。

@AllArgsConstructor
public class User {private String username;
}

反编译class文件,得到的java文件:

public class User {private String username;public User(final String username) {this.username = username;}
}

@RequiredArgsConstructor

将该注解标识在类上,将会为该类生成含有被@NonNull注解的属性的构造方法。

@RequiredArgsConstructor
public class User {@NonNull private String username;private String password;
}

反编译class文件,得到的java文件:

public class User {@NonNullprivate String username;private String password;public User(@NonNull final String username) {if (username == null) {throw new NullPointerException("username is marked non-null but is null");} else {this.username = username;}}
}

@ToString

将该注解标识在类上,将会为该类覆写toString()方法。

@ToString
public class User {private String username;
}

反编译class文件,得到的java文件:

public class User {private String username;public User() {}public String toString() {return "User(username=" + this.username + ")";}
}

@EqualsAndHashCode

将该注解标识在类上,将会为该类覆写equals()方法和hashCode()。

@EqualsAndHashCode
public class User {private String username;
}

反编译class文件,得到的java文件:

public class User {private String username;public User() {}public boolean equals(final Object o) {if (o == this) {return true;} else if (!(o instanceof User)) {return false;} else {User other = (User)o;if (!other.canEqual(this)) {return false;} else {Object this$username = this.username;Object other$username = other.username;if (this$username == null) {if (other$username != null) {return false;}} else if (!this$username.equals(other$username)) {return false;}return true;}}}protected boolean canEqual(final Object other) {return other instanceof User;}public int hashCode() {int PRIME = true;int result = 1;Object $username = this.username;int result = result * 59 + ($username == null ? 43 : $username.hashCode());return result;}
}

@Data

@Data注解是一个复合注解,将该注解标识在类上,相当于在类上标注了@Getter、@Setter、@ToString、@EqualsAndHashCode、@RequiredArgsConstructor五个注解。

@Data
public class User {@NonNull private String username;private String password;
}

反编译class文件,得到的java文件:

public class User {@NonNullprivate String username;private String password;public User(@NonNull final String username) {if (username == null) {throw new NullPointerException("username is marked non-null but is null");} else {this.username = username;}}@NonNullpublic String getUsername() {return this.username;}public String getPassword() {return this.password;}public void setUsername(@NonNull final String username) {if (username == null) {throw new NullPointerException("username is marked non-null but is null");} else {this.username = username;}}public void setPassword(final String password) {this.password = password;}public boolean equals(final Object o) {if (o == this) {return true;} else if (!(o instanceof User)) {return false;} else {User other = (User)o;if (!other.canEqual(this)) {return false;} else {Object this$username = this.getUsername();Object other$username = other.getUsername();if (this$username == null) {if (other$username != null) {return false;}} else if (!this$username.equals(other$username)) {return false;}Object this$password = this.getPassword();Object other$password = other.getPassword();if (this$password == null) {if (other$password != null) {return false;}} else if (!this$password.equals(other$password)) {return false;}return true;}}}protected boolean canEqual(final Object other) {return other instanceof User;}public int hashCode() {int PRIME = true;int result = 1;Object $username = this.getUsername();int result = result * 59 + ($username == null ? 43 : $username.hashCode());Object $password = this.getPassword();result = result * 59 + ($password == null ? 43 : $password.hashCode());return result;}public String toString() {return "User(username=" + this.getUsername() + ", password=" + this.getPassword() + ")";}
}

@Slf4j

将该注解标识在类上,会给该类注入一个Logger对象。

@Slf4j
public class User {private String username;
}

反编译class文件,得到的java文件:

public class User {private static final Logger log = LoggerFactory.getLogger(User.class);private String username;public User() {}
}

@SneakyThrows

将该注解标识在方法上,可以对受检异常进行捕捉并抛出。

public class App {@SneakyThrowspublic static void main(String[] args) {Class.forName("com.herenpeng.entity.User");}
}

反编译class文件,得到的java文件:

public class App {public App() {}public static void main(String[] args) {try {Class.forName("com.herenpeng.entity.User");} catch (Throwable var2) {throw var2;}}
}

最后

本文Github https://github.com/herenpeng/code-learn 已收录,欢迎Star

SpringBoot(三):Lombok相关推荐

  1. SpringBoot三种方式实现定时任务

    SpringBoot三种方式实现定时任务 定时任务实现的三种方式: Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用 ...

  2. springboot 整合lombok

    1.为什么要用lombok? lombo可以简化实体类开发(简化get和set方法,toString方法,hashcode方法,equals方法) 2.springboot 整合lombok (1)引 ...

  3. springboot启动 lombok 找不到符号

    springboot启动 lombok 找不到符号 找了好多方法都没有解决,发现自己使用的是java14,改为java8后正常运行.

  4. springboot依赖lombok插件、lombok常用注解

    --springboot依赖lombok插件.lombok常用注解 1 lombok插件 1.1 lombok插件简介 官方介绍如下: 意思是:lombok是一个能自动插入到编辑器和构建工具的java ...

  5. SpringBoot 三种拦截http请求方式Filter,interceptor和aop

    SpringBoot 三种拦截http请求方式Filter,interceptor和aop. 这三种拦截方式的拦截顺序是:filter->Interceptor-->ControllerA ...

  6. SpringBoot 三招组合拳,手把手教你打出优雅的后端接口

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:RudeCrab 链接:suo.im/5YMt2A 一.前言 ...

  7. Springboot整合Lombok

    一.前言 Lombok提供一系列注解简化了开发人员对类的编写 本项目使用的环境及版本: 开发工具:Intellij IDEA 2017.3.4 Maven版本:3.3.9 SpringBoot:2.3 ...

  8. 项目实践:SpringBoot三招组合拳,手把手教你打出优雅的后端接口

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:juejin.im/post/5e7ab0bae51d452 ...

  9. spring-boot (三) spring data jpa

    学习文章来自:http://www.ityouknow.com/spring-boot.html spring data jpa介绍 首先了解JPA是什么? JPA(Java Persistence ...

  10. 前端封装接口弹出错误_项目实践:SpringBoot三招组合拳,手把手教你打出优雅的后端接口...

    前言 一个后端接口大致分为四个部分组成:接口地址(url).接口请求方式(get.post等).请求数据(request).响应数据(response).如何构建这几个部分每个公司要求都不同,没有什么 ...

最新文章

  1. 迪拜测试世界上首款自动驾驶出租车,距离2030年的自动驾驶目标又进一步
  2. CentOS Git服务安装
  3. JavaScript面向对象编程——Array类型
  4. VS 配置外部DLL的引用路径【可执行文件的环境路径】
  5. python with方法
  6. iOS屏幕适配方案-Auto Layout
  7. 2. Get the codes from GIT
  8. 写作有困扰?不知道用什么词?不知道怎么解释不一致的结果?这个网站来帮你。
  9. 利用Javascript判断操作系统的类型
  10. SpringBoot 工程目录 整合mybatis-neo4j(注解类型)
  11. ubuntu之更新cmake版本
  12. pku 1151 (简单离散化求矩形覆盖总面积)
  13. js 正则 exec() 和 match() 数据抽取
  14. Android Studio插件整理
  15. 手机uc打开本地html,(涨知识)关于手机UC浏览器折叠网页内容解决办法
  16. 当Activity设置为透明主题时,按Home键,Dialog闪烁的解决方法
  17. 四、神奇的自然常数e之“自然”初现
  18. XPDL与WS-BPEL的比较之三:人工活动
  19. 一个基于 Spring Boot 的在线考试系统
  20. 示波器基本原理1:模拟示波器

热门文章

  1. 『Java CVE』CVE-2022-33980: Apache Commons Configuration 读文件RCE
  2. 老家农村的结婚(二)——故事篇
  3. php做excel导入word,php如何将excel表格插入到word文档
  4. Java实现找回密码
  5. Qt之图像处理(五) 矩阵置换与矩阵相乘
  6. 类似直播App的向右滑动清屏功能
  7. 爱快路由安装mysql_ESXi安装爱快iKuai OS路由(图文教程)
  8. Char Popp加入PSB担任高级副总裁兼全球定性研究主管
  9. 电商平台促销方式汇总
  10. 2022年上海市安全员C证考试试题模拟考试平台操作