lombok概述

  • lombok简介

    Lombok想要解决了的是在我们实体Bean中大量的Getter/Setter方法,以及toString, hashCode等可能不会用到,但是某些时候仍然需要复写,以期方便使用的方法;在使用Lombok之后,将由其来自动帮你实现代码生成,注意,其是 在运行过程中,帮你自动生成的 。就是说,将极大减少你的代码总量。
  • lombok作用

    消除模板代码

    getter、setter、构造器、toString()、equals()

    便捷的生成比较复杂的代码,例如一个POJO要转化成构建器模式的形式,只需要一个注解。

SpringBoot中使用lombok

  1. 添加依赖
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
  1. 编写一个实体类 User,使用@Data注解
@Data
public class User {
private String name;
private int age;
}
  1. 编写测试方法,测试@Data的作用
@Test
public void testUser(){
User user = new User();
user.setName("AnyCode");
user.setAge(20);
System.err.println(user.toString());
}

lombok的注解介绍

@NonNull : 让你不在担忧并且爱上NullPointerException

@CleanUp : 自动资源管理:不用再在finally中添加资源的close方法

@Setter/@Getter : 自动生成set和get方法

@ToString : 自动生成toString方法

@EqualsAndHashcode : 从对象的字段中生成hashCode和equals的实现

@NoArgsConstructor/@RequiredArgsConstructor/@AllArgsConstructor

自动生成构造方法

@Data : 自动生成set/get方法,toString方法,equals方法,hashCode方法,不带参数的构造方法

@Value : 用于注解final类

@Builder : 产生复杂的构建器api类

@SneakyThrows : 异常处理(谨慎使用)

@Synchronized : 同步方法安全的转化

@Getter(lazy=true) :

@Log : 支持各种logger对象,使用时用对应的注解,如:@Log4j

推荐使用技巧

  • 在 Bean / Entity 类上使用 @Data 注解。
  • 需要使用 Log 对象的地方使用 @Log4j(依项目日志框架决定)。
  • 注意:lombok 的注解不能被继承。

IDEA中使用lombok

如果想让lombok生效我们还需要针对idea工具进行插件的安装,下面我们按照顺序打开Idea配置

File > Settings > Plugins > Browse repositories... > 输入lombok,插件就会被自动检索出来,如下图所示:



我的工具已经安装了该插件,所有在右侧是没有任何按钮的,如果你的工具没有安装该插件,

右侧会有一个绿色的按钮,按钮的内容则是Install,点击安装后重启Idea就可以了。

lombok常用注解详解

  • @EqualsAndHashCode,@ToString :告诉Lombok来生成 equals, hashCode方法,toString方法

    在生成这些方法的时候lombok会使用所有的成员变量。
  • ** @AllArgsConstructor** :会自动创建一个包括所有成员的构造器。
  • @Getter/@Setter: 注解会为每一个标记的成员变量自动生成对应的方法。
  • 用例
package com.jxlg.lance.springbootcorestudy.lombok;

import lombok.*;

/**
* @author lance(ZYH)
* @function 测试其他注解
* @date 2018-03-22 12:27
*/
@EqualsAndHashCode
@ToString
@AllArgsConstructor
public class Student {
@Setter
@Getter
private String stuName; @Setter
@Getter
private Integer stuAge; @Setter
@Getter
private String stuClass; @Setter
@Getter
private Integer stuNumber;
}
  • 如果你不想将注解用在全部的成员变量上,而是仅仅部分变量上,那么你可以提供一个指定的哪一个成员变量需要

    自动生成方法的变量。举例: 比如在这里,我们只想让stuName,stuAge两个成员变量出现在 toString 方法里。
@EqualsAndHashCode
@ToString(of = {"stuName","stuAge"})
@AllArgsConstructor
public class Student {
@Setter
@Getter
private String stuName; @Setter
@Getter
private Integer stuAge; @Setter
@Getter
private String stuClass; @Setter
@Getter
private Integer stuNumber;
}
  • 这些代码已经比我们一开始要好太多了,但是它任然不够简洁。这里重复了大量的 @Getter 和 @Setter 注解。

    如果你只是需要在Class中仅暴露几个字段,那么使用它们非常方便,但如果您需要为所有字段生成访问器,则会变得烦人又无聊。

    为了使代码更加简洁, Lombok永续我们在类级上使用这些注解。如果这些注解放在类名之上,

    那么lombok会自动为我们生成所有字段的访问方法。
@EqualsAndHashCode
@ToString
@AllArgsConstructor
@Setter
@Getter
public class Student {
private String stuName; private Integer stuAge; private String stuClass; private Integer stuNumber;
}
  • @Buidler :实例化这个类
  • 用例
@EqualsAndHashCode
@ToString
@AllArgsConstructor
@Setter
@Getter
@Builder
public class Student {
private String stuName; private Integer stuAge; private String stuClass; private Integer stuNumber;
} 测试类:
package com.jxlg.lance.springbootcorestudy.lombok; import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4; import static org.junit.Assert.*; @RunWith(JUnit4.class)
public class StudentTest { @Test
public void test(){
Student student = Student.builder()
.stuName("张三")
.stuAge(12)
.stuClass("高三")
.stuNumber(12222)
.build();
System.out.println(student);
}
} 结果:
Student(stuName=张三, stuAge=12, stuClass=高三, stuNumber=12222)
  • @Data :简单的来说所有所有的注解我们都可以使用一个注解完成.也就是@Data

    我们在定义类的时候 只需要加一个 @Data 注解,其他的注解我们都不需要在添加就可以达到前面所说的所有功能。
  • 通过上面介绍的,我们平常使用Lombok只需要这样就是就可以了,如下:
@Data
@Builder
public class User {
private String name;
private Integer age;
}

SpringBoot(四)SpringBoot中lombok使用的更多相关文章

  1. SpringBoot(四) -- SpringBoot与Web开发

    一.发开前准备 1.创建一个SpringBoot应用,引入我们需要的模块 2.SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置,就能运行起来 3.编写业务代码 二.静态资 ...

  2. spring-boot (四) springboot+mybatis多数据源最简解决方案

    学习文章来自:http://www.ityouknow.com/spring-boot.html 配置文件 pom包就不贴了比较简单该依赖的就依赖,主要是数据库这边的配置: mybatis.confi ...

  3. SpringBoot(四): SpringBoot web开发 SpringBoot使用jsp

    1.在SpringBoot中使用jsp,需要在pom.xml文件中添加依赖 <!--引入Spring Boot内嵌的Tomcat对JSP的解析包--> <dependency> ...

  4. SpringBoot 在IDEA中实现热部署(实用版)(引入)

    SpringBoot 在IDEA中实现热部署(实用版) 引用:https://www.jianshu.com/p/f658fed35786 好的热部署让开发调试事半功倍,这样的“神技能”怎么能错过呢, ...

  5. SpringBoot拦截器中Bean无法注入(转)

    问题 这两天遇到SpringBoot拦截器中Bean无法注入问题.下面介绍我的思考过程和解决过程: 1.由于其他bean在service,controller层注入一点问题也没有,开始根本没意识到Be ...

  6. spring-boot的spring-cache中的扩展redis缓存的ttl和key名

    原文地址:spring-boot的spring-cache中的扩展redis缓存的ttl和key名 前提 spring-cache大家都用过,其中使用redis-cache大家也用过,至于如何使用怎么 ...

  7. springboot在eclipse中运行使用开发配置,打包后运行使用生产环境默认配置

    java命令运行springboot jar文件,指定配置文件可使用如下两个参数中其中一个 --spring.config.location=配置文件路径 -Dspring.profiles.acti ...

  8. SpringBoot Mybatis项目中的多数据源支持

    1.概述 有时项目里里需要抽取不同系统中的数据源,需要访问不同的数据库,本文介绍在Springboot+Mybatis项目中如何支持多数据源操作. 有需要的同学可以下载 示例代码 项目结构如下: 2. ...

  9. SpringBoot拦截器中无法注入bean的解决方法

    SpringBoot拦截器中无法注入bean的解决方法 在使用springboot的拦截器时,有时候希望在拦截器中注入bean方便使用 但是如果直接注入会发现无法注入而报空指针异常 解决方法: 在注册 ...

  10. SpringBoot Web项目中中如何使用Junit

    Junit这种老技术,现在又拿出来说,不为别的,某种程度上来说,更是为了要说明它在项目中的重要性. 凭本人的感觉和经验来说,在项目中完全按标准都写Junit用例覆盖大部分业务代码的,应该不会超过一半. ...

随机推荐

  1. HZAU 1199: Little Red Riding Hood 01背包

    题目链接:1199: Little Red Riding Hood 思路:dp(i)表示前i朵花能取得的最大价值,每一朵花有两种选择,摘与不摘,摘了第i朵花后第i-k到i+k的花全部枯萎,那么摘的话d ...

  2. 长整形的使用及cin加速

    _int64 和 long long 那么对ACMer来说,最为关心的就是在各个OJ上交题应分别使用哪种方式了.其实方式只有有限的几种: 如果服务器是linux系统,那么定义用long long,IO ...

  3. EL表达式判断不能为空

    前几天在做一个网站的时候遇到一个问题,要判断一个在request或者session域里面的对象是否为空,利用EL表达式,正常思维就是用 <c:if test="${* != null} ...

  4. tcp/ip 卷一 读书笔记(3)为什么既要有IP地址又要有MAC地址

    网络层 首先明确一点,并不是所有的网络之间传输数据都需要mac地址和ip地址,比如说点对点线路之间的通信就没有MAC地址,网络层使用ipx协议时就没有ip地址,但是在当前的主流网络中,我们都使用ip地 ...

  5. linux shell中获取mongodb最大连接数、内存使用情况等

    前两天接到了一个新的需求,需要在linux shell脚本中监控到mongodb最大连接数.内存使用情况等. 但是我对于linux shel很不了解,只是会一些简单常用的linux的操作而已,只要一顿 ...

  6. WIN7下PS/2等键盘失灵无法使用的解决办法

    WIN7下PS/2等键盘失灵无法使用的解决办法 装了win7,无意中一天开机,发现键盘不能用了.开始以为键盘坏了,重启看机,一看能进bios,各键正常.然后再重启,进系统,看设备管理器,发现键盘为黄色 ...

  7. Android View绘制回调方法流程

    Android中View的性命周期,挪用 invalidate() 战 requestLayout() 会触收哪些方式,一张图就可以讲解的很详细. 该图确切一看便特别很是清楚.让人简略的懂得View的 ...

  8. meta的各种参数

    <!DOCTYPE html> <!-- 使用 HTML5 doctype,不区分大小写 --> <html lang="zh-cmn-Hans"&g ...

  9. hdu5923 Prediction

    jxt的思路 先膜一发 先处理 T这棵树上每个点到祖先这条链的点所生成的并查集 每个点的并查集都得分开来存 这个dfs做就好了 最后询问的时候 将k 个点的并查集合并就是这个询问的连通图 易得答案 # ...

  10. C# 获取一个独一无二的字符串 GUID

    在保存文件,创建目录时,为了保证名称不重复,经常使用Random产生一个随机数,有更简单且不会重复的办法是: Guid.NewGuid().ToString() 就会生成一个类似 37c1acec-4 ...