微信公众号:一个优秀的废人
若有问题或建议,请后台留言,我会尽力解决你的问题。
上周去了开年会,去的地方是温泉度假村。老实说,我是无感的,90% 是由于没中奖(老板太抠,两百人只抽三个奖),10 % 是由于从小泡温泉长大没啥感受。java
LomBok 是一个插件,它能经过注解帮咱们消除那些必需要写可是重复的代码,好比setter,getter,构造函数之类的方法。git
试想一个场景,在项目开发中,咱们每每须要定义大量的数据库实体或者某些工具 Bean ,每个 Bean 都须要咱们编写 getter 、setter 方法、构造方法以及 toString 等方法。这是一个很是繁琐的过程。程序员准则,作三遍以上的重复事情就必须想办法让它自动化了。因此今天给大家介绍一个牛逼的插件「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方法。
一、直接从 http://plugins.jetbrains.com/ 下载,而后放到IDEA 安装文件下面的 plugins,而后重启 IDEA。github
二、在 IDEA 的 settings(windows)或者Preferences(mac),下找到 plugins 菜单,点击 Browse repositories,以下图web
第二步搜索 LomBok 点击 Install (我这里已经安装了,可是有更新。因此显示的是 Update 按钮)重启 IDEA 。spring
新建 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 的类,代码以下:apache
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 类代码的简洁),代码以下:windows
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 用起来。
最后奉上 项目完整代码
以上就是我对 LomBok 插件的理解与使用,但愿对大家有帮助。最后,对 Python 、Java 感兴趣请长按二维码关注一波,我会努力带给大家价值,若是以为本文对你哪怕有一丁点帮助,请帮忙点好看,让更多人知道。