在Android项目中选择Lombok,Compiler时开启插件的注释功效

对于IJ这些IDE工具以来,大家会安装一些插件来增派我们越来越好的扩充付出,像lombok便是大器晚成款不错的插件,使用注明的点子在项目编写翻译时拉拉扯扯大家转移代码,像getter,setter,tostring等等,它们日常都以一些再度的代码,而lombok正是赞助大家转移那个重新代码的,对于二个IJ的工具以来,假设你不运维编写翻译时表明功效,那么项目在build时会报错!

前言:

逛开源社区的时候无意发掘的,用了生机勃勃段时间,认为还足以,特此推荐一下。

lombok
提供了轻易的笺注的花样来支援我们简化清除一些亟须有但突显很痴肥的 java
代码。特别是对此 POJO,光说不做不是本人的风格,先来拜谒啊。

lombok的官网:http://projectlombok.org/

lombok表明在线帮忙文书档案:在Android项目中选择Lombok,Compiler时开启插件的注释功效。http://projectlombok.org/features/index.

lombok 其实到那边自个儿就介绍完了,开个玩笑,其实官方网址络有 lombok
四分八十六秒的录像批注,里面讲的也很清楚了,况兼还会有文书档案能够参谋。在此边本身就不扯太多,先来看一下lombok
的设置,其实这几个官方网站录制上也是有讲到啦

前言

事先写了一下后台代码,发掘后台项目中运用了一个很好用的插件——Lombok。它帮助工程师幸免写一些setter、getter、toString等机械化的代码,减弱了技术员的机械劳动。既然是Java项目,那么在Android中应该也是能用的,于是在Android项目中也尝尝了弹指间。

前言

开卷开源项指标时候发掘作者用了@data注明,在并未设置lombok以前ide提醒找不到相应的get、set方法,查阅资料后开采小编是选用了lombok插件。

拉开build时的表明

 “Settings > Build >
Compiler > Annotation Processors”

www.5929.com 1

接下来再安装lombok插件

www.5929.com 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 方法
在Android项目中选择Lombok,Compiler时开启插件的注释功效。@Getter:表明在质量上;为属性提供 getting 方法
www.5929.com,@Log4j :申明在类上;为类提供二个 属性名称叫log 的 log4j 日志对象
@NoArgsConstructor:注脚在类上;为类提供三个无参的构造方法
@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安装插件

www.5929.com 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 :表明在类上;为类提供一个 属性名叫log 的 log4j 日志对象
@NoArgsConstructor:注脚在类上;为类提供一个无参的构造方法
@AllArgsConstructor:评释在类上;为类提供一个全参的构造方法


始建实体

为了便于演示lombok的奇妙之处,大家大致创设多少个客户实体,基于该实体进行布局lombok注脚,实体代码如下所示:

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

上边大家先来寻访大家最常用的getter/setter基于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所示:

www.5929.com 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官方文书档案地址

完结,歇息!

Leave a Comment.