SpringBoot(三):Lombok
文章目录
- 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相关推荐
- SpringBoot三种方式实现定时任务
SpringBoot三种方式实现定时任务 定时任务实现的三种方式: Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用 ...
- springboot 整合lombok
1.为什么要用lombok? lombo可以简化实体类开发(简化get和set方法,toString方法,hashcode方法,equals方法) 2.springboot 整合lombok (1)引 ...
- springboot启动 lombok 找不到符号
springboot启动 lombok 找不到符号 找了好多方法都没有解决,发现自己使用的是java14,改为java8后正常运行.
- springboot依赖lombok插件、lombok常用注解
--springboot依赖lombok插件.lombok常用注解 1 lombok插件 1.1 lombok插件简介 官方介绍如下: 意思是:lombok是一个能自动插入到编辑器和构建工具的java ...
- SpringBoot 三种拦截http请求方式Filter,interceptor和aop
SpringBoot 三种拦截http请求方式Filter,interceptor和aop. 这三种拦截方式的拦截顺序是:filter->Interceptor-->ControllerA ...
- SpringBoot 三招组合拳,手把手教你打出优雅的后端接口
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:RudeCrab 链接:suo.im/5YMt2A 一.前言 ...
- Springboot整合Lombok
一.前言 Lombok提供一系列注解简化了开发人员对类的编写 本项目使用的环境及版本: 开发工具:Intellij IDEA 2017.3.4 Maven版本:3.3.9 SpringBoot:2.3 ...
- 项目实践:SpringBoot三招组合拳,手把手教你打出优雅的后端接口
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:juejin.im/post/5e7ab0bae51d452 ...
- spring-boot (三) spring data jpa
学习文章来自:http://www.ityouknow.com/spring-boot.html spring data jpa介绍 首先了解JPA是什么? JPA(Java Persistence ...
- 前端封装接口弹出错误_项目实践:SpringBoot三招组合拳,手把手教你打出优雅的后端接口...
前言 一个后端接口大致分为四个部分组成:接口地址(url).接口请求方式(get.post等).请求数据(request).响应数据(response).如何构建这几个部分每个公司要求都不同,没有什么 ...
最新文章
- 迪拜测试世界上首款自动驾驶出租车,距离2030年的自动驾驶目标又进一步
- CentOS Git服务安装
- JavaScript面向对象编程——Array类型
- VS 配置外部DLL的引用路径【可执行文件的环境路径】
- python with方法
- iOS屏幕适配方案-Auto Layout
- 2. Get the codes from GIT
- 写作有困扰?不知道用什么词?不知道怎么解释不一致的结果?这个网站来帮你。
- 利用Javascript判断操作系统的类型
- SpringBoot 工程目录 整合mybatis-neo4j(注解类型)
- ubuntu之更新cmake版本
- pku 1151 (简单离散化求矩形覆盖总面积)
- js 正则 exec() 和 match() 数据抽取
- Android Studio插件整理
- 手机uc打开本地html,(涨知识)关于手机UC浏览器折叠网页内容解决办法
- 当Activity设置为透明主题时,按Home键,Dialog闪烁的解决方法
- 四、神奇的自然常数e之“自然”初现
- XPDL与WS-BPEL的比较之三:人工活动
- 一个基于 Spring Boot 的在线考试系统
- 示波器基本原理1:模拟示波器