微信公众号:一个优秀的废人

如有问题或建议,请后台留言,我会尽力解决你的问题。

前言

上周去了开年会,去的地方是温泉度假村。老实说,我是无感的,90% 是因为没中奖(老板太抠,两百人只抽三个奖),10 % 是因为从小泡温泉长大没啥感觉。

LomBok 是什么?

LomBok 是一个插件,它能通过注解帮我们消除那些必须要写但是重复的代码,比如setter,getter,构造函数之类的方法。

试想一个场景,在项目开发中,我们往往需要定义大量的数据库实体或者某些工具 Bean ,每一个 Bean 都需要我们编写 getter 、setter 方法、构造方法以及 toString 等方法。这是一个非常繁琐的过程。程序员准则,做三遍以上的重复事情就必须想办法让它自动化了。所以今天给你们介绍一个牛逼的插件「LomBok」。

LomBok 常用注解简介

@Data:注解在类上,将类提供的所有属性都添加get、set方法,并添加、equals、canEquals、hashCode、toString方法
@Setter:注解在类上,为所有属性添加set方法、注解在属性上为该属性提供set方法
@Getter:注解在类上,为所有的属性添加get方法、注解在属性上为该属性提供get方法
@NotNull:在参数中使用时,如果调用时传了null值,就会抛出空指针异常
@Synchronized 用于方法,可以锁定指定的对象,如果不指定,则默认创建一个对象锁定
@Log作用于类,创建一个log属性
@Builder:使用builder模式创建对象
@NoArgsConstructor:创建一个无参构造函数
@AllArgsConstructor:创建一个全参构造函数
@ToStirng:创建一个toString方法
@Accessors(chain = true)使用链式设置属性,set方法返回的是this对象。
@RequiredArgsConstructor:创建对象
@UtilityClass:工具类
@ExtensionMethod:设置父类
@FieldDefaults:设置属性的使用范围,如private、public等,也可以设置属性是否被final修饰。
@Cleanup: 关闭流、连接点。
@EqualsAndHashCode:重写equals和hashcode方法。
@toString:创建toString方法。

如何安装?

1、直接从 http://plugins.jetbrains.com/ 下载,然后放到IDEA 安装文件下面的 plugins,然后重启 IDEA。

2、在 IDEA 的 settings(windows)或者Preferences(mac),下找到 plugins 菜单,点击 Browse repositories,如下图

第二步搜索 LomBok 点击 Install (我这里已经安装了,但是有更新。所以显示的是 Update 按钮)重启 IDEA 。

代码演示

新建 SpringBoot 项目,不会构建的看这篇文章 使用 IDEA 构建 Spring Boot 工程 ,构建时勾选 web 依赖和 Lombok 依赖,完整 pom 如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.nasus</groupId>
<artifactId>lombok</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>lombok</name>
<description>lombok_demo project for Spring Boot</description> <properties>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>

新建一个 Student 类,这是使用 lombok 的类,代码如下:

package com.nasus.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor; /**
* Project Name:springboot_lomnok_demo <br/>
* Package Name:com.nasus.entity <br/>
* Date:2019/1/23 0023 14:32 <br/>
* <b>Description:</b> TODO: 描述该类的作用 <br/>
*
* @author <a href="mailto:chenzy@eastcom-sw.com">chenzy</a><br/>
* Copyright Notice =========================================================
* This file contains proprietary information of Eastcom Technologies Co. Ltd.
* Copying or reproduction without prior written approval is prohibited.
* Copyright (c) 2019 =======================================================
*/
@Data //自动生成set/get方法,toString方法,equals方法,hashCode方法,不带参数的构造方法
@AllArgsConstructor //自动生成构造方法
@NoArgsConstructor //自动生成构造方法
public class Student { private String id;
private String name;
private int age; }

新建一个 StudentNoLombok 类,这是没有使用 lombok 的类(此类在项目中无用处,只为与使用 Lombok 的类对比,突出使用 LomBok 类代码的简洁),代码如下:

package com.nasus.entity;

import java.util.Objects;

/**
* Project Name:springboot_lomnok_demo <br/>
* Package Name:com.nasus.entity <br/>
* Date:2019/1/23 0023 14:34 <br/>
* <b>Description:</b> TODO: 描述该类的作用 <br/>
*
* @author <a href="mailto:chenzy@eastcom-sw.com">chenzy</a><br/>
* Copyright Notice =========================================================
* This file contains proprietary information of Eastcom Technologies Co. Ltd.
* Copying or reproduction without prior written approval is prohibited.
* Copyright (c) 2019 =======================================================
*/
public class StudentNoLombok { private String id;
private String name;
private int age; public StudentNoLombok() {
} public StudentNoLombok(String id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
} public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} @Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof StudentNoLombok)) {
return false;
}
StudentNoLombok that = (StudentNoLombok) o;
return age == that.age &&
Objects.equals(id, that.id) &&
Objects.equals(name, that.name);
} @Override
public int hashCode() { return Objects.hash(id, name, age);
} @Override
public String toString() {
return "StudentNoLombok{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}

从上面两个类对比可以看出,使用 LomBok 插件的类比不使用简洁美观得多。

新建 StudentController 类,代码如下:

package com.nasus.controller;

import com.nasus.entity.Student;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; /**
* Project Name:springboot_lomnok_demo <br/>
* Package Name:com.nasus.controller <br/>
* Date:2019/1/23 0023 14:37 <br/>
* <b>Description:</b> TODO: 描述该类的作用 <br/>
*
* @author <a href="mailto:chenzy@eastcom-sw.com">chenzy</a><br/>
* Copyright Notice =========================================================
* This file contains proprietary information of Eastcom Technologies Co. Ltd.
* Copying or reproduction without prior written approval is prohibited.
* Copyright (c) 2019 =======================================================
*/
@RestController
@RequestMapping("/student")
public class StudentController { @GetMapping("/testLombok")
public Student getStudent(){
Student student = new Student();
student.setId("6666666666");
student.setAge(24);
student.setName("陈志远");
System.out.println(student.toString());
return student;
} }

启动项目,访问地址 http://localhost:8080/student/testLombok 浏览器输出如下:

控制台输出如下:

由上面两个输出结果可以看出,LomBok 插件起作用了。即使 Student 没有重写 toString 方法,依然可以调用,而且结果和重写了 toString 方法一样。

当项目很庞大的时候,往往基础的 Bean 也非常多。建议看到这篇文章的你可以在项目中把 LomBok 用起来。

最后奉上 项目完整代码

后语

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「一个优秀的废人」,关注后回复「1024」送你一套完整的 java 教程。

Spring Boot2 系列教程 (三) | 使用 LomBok 提高开发效率的更多相关文章

  1. Spring Boot2 系列教程(三十)Spring Boot 整合 Ehcache

    用惯了 Redis ,很多人已经忘记了还有另一个缓存方案 Ehcache ,是的,在 Redis 一统江湖的时代,Ehcache 渐渐有点没落了,不过,我们还是有必要了解下 Ehcache ,在有的场 ...

  2. Spring Boot2 系列教程(三)理解 Spring Boot 项目中的 parent

    前面和大伙聊了 Spring Boot 项目的三种创建方式,这三种创建方式,无论是哪一种,创建成功后,pom.xml 坐标文件中都有如下一段引用: <parent> <groupId ...

  3. Spring Boot2 系列教程(三十一)Spring Boot 构建 RESTful 风格应用

    RESTful ,到现在相信已经没人不知道这个东西了吧!关于 RESTful 的概念,我这里就不做过多介绍了,传统的 Struts 对 RESTful 支持不够友好 ,但是 SpringMVC 对于 ...

  4. Spring Boot2 系列教程(三十二)Spring Boot 整合 Shiro

    在 Spring Boot 中做权限管理,一般来说,主流的方案是 Spring Security ,但是,仅仅从技术角度来说,也可以使用 Shiro. 今天松哥就来和大家聊聊 Spring Boot ...

  5. Spring Boot2 系列教程(二十)Spring Boot 整合JdbcTemplate 多数据源

    多数据源配置也算是一个常见的开发需求,Spring 和 SpringBoot 中,对此都有相应的解决方案,不过一般来说,如果有多数据源的需求,我还是建议首选分布式数据库中间件 MyCat 去解决相关问 ...

  6. Java进阶教程:使用Lombok提升开发效率

    Java进阶教程:使用Lombok提升开发效率 Lombok Lombok是一种Java™实用工具,可用来帮助开发人员消除Java的冗长代码,尤其是对于简单的Java对象(POJO).它通过注释实现这 ...

  7. Spring Boot系列教程三:使用devtools实现热部署

    一.前言 Eclipse下使用spring-tool-suite插件创建一个spring boot 工程,通过右键“Run As”--->"Spring Boot App"来 ...

  8. Spring Boot2 系列教程(二)创建 Spring Boot 项目的三种方式

    我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 43W+,如下图: 2017 年由于种种原因,就没有 ...

  9. Spring Boot2 系列教程(二十六)Spring Boot 整合 Redis

    在 Redis 出现之前,我们的缓存框架各种各样,有了 Redis ,缓存方案基本上都统一了,关于 Redis,松哥之前有一个系列教程,尚不了解 Redis 的小伙伴可以参考这个教程: Redis 教 ...

随机推荐

  1. codeforces 609C

    #include<bits/stdc++.h> using namespace std; ],c[]; int main() { int n,i; while(cin >> n ...

  2. java Math和Random和UUID

    Math类 public final class Math extends Object 以下X表示double,float,int, long abs(X x):求绝对值 max(X x1,X x2 ...

  3. java构造方法的私有化

    有的时候我们为了避免外界创建某类的实例,就将某类的构造方法私有化,即将它的构造方法用private修饰: 外界如何用到? 提供get方法!不提供的话外界就没法创建对象!(对反射无效) Eg:packa ...

  4. laravel 常用文档

    [ Laravel 5.6 文档 ] 快速入门 —— 目录结构  laravel学院 http://laravelacademy.org/post/8657.html Laravel 的缓存系统    ...

  5. 如何通过命令行 msbuild 编译项目

    本文告诉大家如何通过 msbuild 编译一个项目,通过命令行编译可以输出更多的编译信息,可以用来调试自己写的编译相关方法,可以看到是哪个文件编译失败 在开始菜单可以找到 VisualStudio 的 ...

  6. P1038 间谍入侵

    题目描述 爱丽丝魔法王国成立10周年,于是决定矩形国庆大阅兵. 在国庆大阅兵期间,为了防止暗黑王国的间谍乔装成平民混入,需要对每一个进城的人做检测. 因为暗黑王国的人长得和爱丽丝魔法王国的人长得很像, ...

  7. H3C 配置路由器作为FTP客户端

  8. HDU 1711 Number Sequence (KMP 入门)

    Number Sequence Problem Description Given two sequences of numbers : a[1], a[2], ...... , a[N], and ...

  9. javascript基础的一些总结

    一 闭包 各种专业文献上的"闭包"(closure)定义非常抽象,很难看懂.我的理解是,闭包就是能够读取其他函数内部变量的函数. 由于在Javascript语言中,只有函数内部的子 ...

  10. 【2016常州一中夏令营Day2】

    小 W 学数学[问题描述]为了测试小 W 的数学水平,果果给了小 W N 个点,问他这 N 个点能构成的三角形个数.[输入格式]第一行一个整数 N,代表点数.接下来 N 行,每行两个非负整数 X.Y, ...