lombok介绍及接纳形式,Boot中运用小插件Lombok

by admin on 2019年2月19日

对于IJ那些IDE工具以来,大家会设置一些插件来资助我们更好的展开付出,像lombok就是一款不错的插件,使用评释的点子在品种编译时拉扯大家转移代码,像getter,setter,tostring等等,它们一般都以有的重新的代码,而lombok就是支援大家转移这几个重新代码的,对于三个IJ的工具以来,即使您不运营编译时表明效用,那么项目在build时会报错!

前言:

lombok介绍及接纳形式,Boot中运用小插件Lombok。逛开源社区的时候无意发现的,用了一段时间,觉得还足以,特此推荐一下。

lombok
提供了不难的注明的方式来扶持我们简化化解一些需求有但出示很臃肿的 java
代码。尤其是对于 POJO,光说不做不是本人的风骨,先来看望啊。

lombok的合法网址:http://projectlombok.org/

lombok注脚在线协助文档:http://projectlombok.org/features/index.

lombok介绍及接纳形式,Boot中运用小插件Lombok。lombok 其实到那边作者就介绍完了,开个玩笑,其实官网上有 lombok
三分四十九秒的摄像讲解,里面讲的也很明白了,而且还有文档可以参见。在这边小编就不扯太多,先来看一下lombok
的设置,其实那个官网录制上也有讲到啦

前言

事先写了一晃后台代码,发现后台项目中行使了二个很好用的插件——Lombok。它接济程序员避免写一些setter、getter、toString等机械化的代码,减弱了程序员的教条劳动。既然是Java项目,那么在Android中应当也是能用的,于是在Android项目中也尝试了一下。

前言

翻阅开源项目标时候发现笔者用了@data注明,在未曾设置lombok在此之前ide指示找不到相应的get、set方法,查阅资料后意识作者是应用了lombok插件。

敞开build时的笺注

 “Settings > Build >
Compiler > Annotation Processors”

bf88必发唯一官网 1

接下来再安装lombok插件

bf88必发唯一官网 2

在品种里布置关于lombok的依赖项

compileOnly('org.projectlombok:lombok:1.16.20')

终极就足以在代码中行使lombok的表明了

/**
 * 用户实体
 *
* @Data :注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
* @Setter:注解在属性上;为属性提供 setting 方法
* @etter:注解在属性上;为属性提供 getting 方法
* @og4j :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
* @oArgsConstructor:注解在类上;为类提供一个无参的构造方法
* @llArgsConstructor:注解在类上;为类提供一个全参的构造方法
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserInfo {
    @Id
    private String id;
    @NotNull
    private String name;
    private String email;
}

好了,启用插件评释就说到那边,感激阅读!

 

lombok 注解:

lombok 提供的笺注不多,可以参照官方录像的讲课和法定文档。

lombok诠释在线襄助文档:http://projectlombok.org/features/index.

下边介绍多少个自作者常用的 lombok 声明:

@Data:评释在类上;提供类具有属性的 getting 和 setting
方法,其余还提供了equals、canEqual、hashCode、toString 方法
@Setter:申明在质量上;为属性提供 setting 方法
@Getter:表明在性质上;为属性提供 getting 方法
@Log4j :注脚在类上;为类提供一个 属性名为log 的 log4j 日志对象
@NoArgsConstructor:注明在类上;为类提供1个无参的构造方法
@AllArgsConstructor:注明在类上;为类提供多个全参的构造方法

下边是粗略示例

1.不使用 lombok 的方案

public class Person {

    private String id;
    private String name;
    private String identity;
    private Logger log = Logger.getLogger(Person.class);

    public Person() {     
    }

    public Person(String id, String name, String identity) {
        this.id = id;
        this.name = name;
        this.identity = identity;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getIdentity() {
        return identity;
    }

    public void setId(String id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setIdentity(String identity) {
        this.identity = identity;
    }
}

2.使用 lombok 的方案:

@Data 
@Log4j
@NoArgsConstructor 
@AllArgsConstructor 
public class Person { 
    private String id; 
    private String name; 
    private String identity; 
} 

上面的三个 java
类,从效果上来看,它们的意义是同样的,相相比之下,很强烈,使用 lombok
要简明许多,尤其是在类的性质较多的气象下,同时也幸免了修改字段名字时候忘记修改章程名所犯的起码错误。

出于自个儿在测试类中采用log变量,竟然是飘红的,不过的确编译运维又不会报错,对于失眠的本人鲜明须要找到消除的方案。因而下边专门讲讲基于IDEA+SpringBoot+lombok的采纳方案。

依赖

如下是Gradle文件配置。因为Lombok的法则是依据声明生成代码,所以须求拔取apt。
在Project的build.gradle文件中添加对apt的正视性

buildscript {
    repositories {
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.2'
        //添加apt依赖
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }
}

在app的build.gradle文件中修改

//应用apt插件
apply plugin: 'com.neenbedankt.android-apt'
...

dependencies {
        compile 'org.projectlombok:lombok:1.16.8'  //添加lombok依赖
        ...
}

介绍

Lombok是贰个可以通过简单的诠释格局来辅助大家简化消除一些须求有但突显很臃肿的Java代码的工具,通过采取相应的注释,可以在编译源码的时候生成对应的章程。
lombok
的合法网址:http://projectlombok.org/


目标

使用Lombok增加开发功效。

代码

lombok使用Annotation来表明有个别类要求添加getter,setter等,上边是使用lombok和不使用lombok的比较。

@Setter
@Getter
@ToString
public class XXX implements Entity {

    String id;

}

public class XXX implements Entity {

    String id;

    public String getId(){
        return this.id;
    }

    public void setId(String id){
        this.id = id;
    }
}

可以看到大家不再需求手工去写Getter和Setter了。

lombok的安装

在IDEA下 file->settings-Plugins搜索lombok安装插件

bf88必发唯一官网 3

安装lombok插件

并在品种中添加lombok看重

     <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
         <version>1.16.14</version>
     </dependency>

营造项目

本章的品种不涉及数量访问,所以添加的依赖也比较少,pom.xml配置文件如下所示:

<?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>

    <groupId>com.ozan</groupId>
    <artifactId>sell</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>sell</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.10.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <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>
        </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>

lombok的器重仅仅唯有贰个,lombok基于配置在编译class文件时会自动将点名模板的故事情节写入。

AS插件

添加了重视之后,纵然编译时是没错的。不过因为Android
Studio语法识别器不认识@Getter和@Setter评释,所以必要添加Lombok插件。
在安装页面 -> plugins -> browser repository -> 搜索lombok ->
install
成功安装之后,再写比如XXX.getId()方法时AS就不会报错了。

lombok的注解:

lombok
申明在线协助文档:http://projectlombok.org/features/index.
下边介绍多少个常用的 lombok 注明:
@Data :评释在类上;提供类具有属性的 getting 和 setting 方法,
除此以外还提供了equals、canEqual、hashCode、toString 方法
@Setter:声明在性质上;为属性提供 setting 方法
@Getter:申明在性质上;为属性提供 getting 方法
@Log4j :声明在类上;为类提供1个 属性名为log 的 log4j 日志对象
@NoArgsConstructor:注明在类上;为类提供壹个无参的构造方法
@AllArgsConstructor:表明在类上;为类提供3个全参的构造方法


创办实体

为了方便演示lombok的神奇之处,大家简要创制二个用户实体,基于该实体进行配置lombok申明,实体代码如下所示:

public class UserBean
{
    //名称
    private String name;
    //年龄
    private int age;
    //家庭住址
    private String address;
}

上面咱们先来看望我们最常用的getter/setterbf88必发唯一官网,基于lombok什么行使。

上面是三个例证:

使用lombok之前:

public class User {
    private String id;
    private int age;
    private String name;

    public String getId() {
        return id;
    }

     public void setId(String id){
        this.id=id;
     }

    public int getAge() {
        return age;
    }

     public void setAge(int age){
        this.age=age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name){
        this.name=name;
    } 
    public User(String id,int age,String name){
        this.id=id;
        this.age=age;
        this.name=name;
    }
}

使用lombok之后:

@data
@AllArgsConstructor
public class User {
    private String id;
    private int age;
    private String name;
}

Getter/Setter


Getter/Setter声明功效域可以是实体类也得以是现实性的属性字段,上面大家唯有对name属性添加注脚,代码如下所示:

//...省略
//名称
@Getter
@Setter
private String name;

如若想让lombok生效我们还亟需针对idea工具举行插件的安装,下边大家依照顺序打开Idea配置File
> Settings > Plugins > Browse repositories… >
输入lombok,插件就会被自动检索出来,界面如下图1所示:

bf88必发唯一官网 4


故而添加lombok的插件是十三分有要求的,不然项目在未编译前随地飘红。

本身的工具已经安装了该插件,全数在右手是绝非其余按钮的,倘使你的工具没有安装该插件,左边会有一个古金色的按钮,按钮的情节则是Install,点击安装后重启Idea就足以了。
为了有利于大家一直运用SpringBoot项目为大家创立的测试类来声明大家的lombok表明是或不是曾经生效,测试类代码如下所示:

@RunWith(JUnit4.class)
//@RunWith(SpringRunner.class)
//@SpringBootTest
public class Chapter29ApplicationTests {

    @Test
    public void testLombok()
    {
        //测试Getter/Setter
        UserBean user = new UserBean();
        user.setName("测试lombok");
        System.out.println(user.getName());
    }
}

可以见到我们得以健康使用name属性的getter/setter方法,不过任何属性的却是不可以调用,上面我们修改注明Getter/Setter地点,配置到实体类上。修改后的代码如下所示:

//省略...
@Getter
@Setter
public class UserBean
{
    //名称
    private String name;
    //年龄
    private int age;
    //家庭住址
    private String address;
}

我们再来测试下其余属性是还是不是可以访问到了,测试类修改代码如下所示:

//省略...
@Test
    public void testLombok()
    {
        //测试Getter/Setter
        UserBean user = new UserBean();
        user.setName("测试lombok");
        user.setAge(10);
        user.setAddress("测试地址");

        System.out.println(user.getName()+"  " + user.getAge() +"  "+user.getAddress());
    }

可以观察我们修改配置地方后UserBean实体内的拥有属性都拥有了Getter/Setter方法,那样我们在付出中就不必要再去做多余的生成操作了。

ToString


除了上述的Getter/SetterLombok还为大家提供了自动生成toString方法的注释@ToString,该评释的效用域仅仅是在实体类上,大家修改实体类添加该注明,在测试类中调用toString方法查看输出内容如下:

System.out.println(user.toString());
//输出:
UserBean(name=测试lombok, age=10, address=sss测试地址)

Lombok自动创造的toString方法会将全部的质量都带有并且调用后可以出口。

AllArgsConstructor


Lombok还提供了整个参数的构造函数的自动生成,该注明的效能域也是只有在实体类上,因为唯有实体类才会设有构造函数。修改添加该评释并且测试调用,如下所示:

UserBean u = new UserBean("构造lombok",1,"测试地址");
//输出:
UserBean(name=构造lombok, age=1, address=sss测试地址)

瞩目:该注解配置后会自动生成多个切实全部参数的构造函数,参数的逐条与质量定义的依次一致。

NoArgsConstructor

理所当然除了全体参数的构造函数,Lombok还提供了从未参数的构造函数,使用格局与@AllArgsConstructor一致。

到那里可能你就极度了,作者为了二个类添加这么多评释麻烦呢?还不如工具生成getter/setter来的快呢,那好Lombok针对这些题材也做出了消除方案。

Data


大家利用@Data声明就能够包罗@ToString、@Getter、@Setter方法,当然大家采取构造函数时依然索要独自添加申明,上边大家修改实体类添加@Data评释代码如下所示:

/*@Getter
@Setter
@ToString*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserBean
{
    //名称
    private String name;
    //年龄
    private int age;
    //家庭住址
    private String address;

    public String getAddress() {
        return "sss"+address;
    }
}

咱俩将@ToString、@Getter、@Setter三个注解注释掉后添加@Data,根据官方所说那时我们的测试类应该不会见世其余的百般,大家开辟测试类查看是还是不是健康。

翻开后果真,没有出现任何的不行,那也认证了@Data注脚确实含有了上边多个评释。

Slf4j


还有一个利器,Lombok为大家松手了各样日志组件的支撑,大家在SpringBoot项目支付中大约都以选择logback作为日志组件,而logback是依照slf4j达成的。所以大家在实体类上间接抬高@Slf4j就足以自行创立二个日志对象作为类内全局字段,自动创造的代码如下所示:

private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(Chapter29ApplicationTests.class);

为了测试本身在Chapter29ApplicationTests测试类上添加了@Slf4j,调用效果如下所示:

//调用:
log.info(u.toString());
//输出:
23:55:46.100 [main] INFO com.yuqiyu.chapter29.Chapter29ApplicationTests - UserBean(name=构造lombok, age=1, address=sss测试地址)

总结


上述内容就是本章的全体叙述,本章主要教师Lombok用以便于开发的注释组件。Lombok固然如此提供的零部件不多,可是每多少个都以大家须要的,正是因为如此从而大大裁减了我们的工作量,特别是那种不起眼却又不得不写的代码。Lombok官方文档地址

完结,歇息!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图