Compiler时开启插件的证明成效,Boot中采取小插件Lombok

对于IJ这个IDE工具来说,我们会安装一些插件来帮助我们更好的进行开发,像lombok就是一款不错的插件,使用注解的方式在项目编译时帮助我们生成代码,像getter,setter,tostring等等,它们一般都是一些重复的代码,而lombok就是帮助我们生成这些重复代码的,对于一个IJ的工具来说,如果你不启动编译时注解功能,那么项目在build时会报错!

www.649net,前言:

逛开源社区的时候无意发现的,用了一段时间,觉得还可以,特此推荐一下。

lombok
提供了简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 java
代码。特别是对于 POJO,光说不做不是我的风格,先来看看吧。

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

lombok注解在线帮助文档:http://projectlombok.org/features/index.

lombok 其实到这里我就介绍完了,开个玩笑,其实官网上有 lombok
三分四十九秒的视频讲解,里面讲的也很清楚了,而且还有文档可以参考。在这里我就不扯太多,先来看一下lombok
的安装,其实这个官网视频上也有讲到啦

前言

之前写了一下后台代码,发现后台项目中使用了一个很好用的插件——Lombok。它帮助程序员避免写一些setter、getter、toString等机械化的代码,减少了程序员的机械劳动。既然是Java项目,那么在Android中应该也是能用的,于是在Android项目中也尝试了一下。

开启build时的注释

 “Settings > Build >
Compiler > Annotation Processors”

www.649net 1

然后再安装lombok插件

www.649net 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:注解在类上;为类提供一个无参的构造方法
@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提高开发效率。

代码

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了。

构建项目

本章的项目不涉及数据访问,所以添加的依赖也比较少,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就不会报错了。