lombok介绍及运用方法

2019-04-08 02:06栏目:编程程序

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

Getter/Setter


Getter/Setter注解作用域可以是实体类也可以是具体的属性字段,下面我们仅仅对name属性添加注解,代码如下所示:

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

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

图片 1


因此添加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方法,这样我们在开发中就不需要再去做多余的生成操作了。

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:注解在类上;为类提供一个全参的构造方法


开启build时的注释

 "Settings > Build > Compiler > Annotation Processors"

图片 2

然后再安装lombok插件

图片 3

在项目里配置关于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注解,实体代码如下所示:

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

下面我们先来看看我们最常用的getter/setter基于lombok如何使用。

前言

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

介绍

Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。
lombok 的官方网址:http://projectlombok.org/


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之前:

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;
}

版权声明:本文由ca888发布于编程程序,转载请注明出处:lombok介绍及运用方法