在日常开发中,我们经常要对一个实体类的属性增加 get、set 的方法,不仅占用篇幅长,而且显得代码冗余,也是重复造轮子的例子。

我们经常看到别人的项目只需要增加一个 @Data 就省去了属性的 get、set 方法,怎么做到的呢?

其实就是增加 lombok 依赖和 IDEA 安装插件。

 

步骤1、pom.xml 增加 lombok 的依赖

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

maven 会自动帮我们把最新的 lombok 依赖导入,如图:

getset java实体类 注解 java实体类上添加注解_Lombok

 

我们在一个实体类上增加 @Data 注解,就不需要显示的写出生成 get、set 方法了

package com.study.entity;

import lombok.*;

/**
 * @author biandan
 * @description
 * @signature 让天下没有难写的代码
 * @create 2021-06-06 下午 5:45
 */
@Data
public class UserEntity {

    private Integer id;

    private String userName;

    private String password;

    private String desc;

}

不过在使用实体类的时候,还是有点不顺(红色波浪线,看起来像报错的样子。但是它能编译通过,而且能运行。):

getset java实体类 注解 java实体类上添加注解_Data_02

运行测试:

getset java实体类 注解 java实体类上添加注解_getset java实体类 注解_03

步骤2、IDEA 安装 Lombok 插件

在 IDEA 上找到 File -》Settings -》Plugins,在搜索框输入 lombok

getset java实体类 注解 java实体类上添加注解_属性值_04

如果我们 IDEA 没安装 lombok 插件,点击【Search in repositories】去插件市场寻找。

找到 Lombok 插件,这个被下载了一千多万的插件,右边点击安装 install。安装完毕后,点击重启 IDEA 即可。

getset java实体类 注解 java实体类上添加注解_实体类_05

 

效果图。不报红色了,而且对着方法按住 Ctrl + 鼠标左键  还能跳到属性值上,靠谱,好使!

getset java实体类 注解 java实体类上添加注解_Lombok_06

OK,就是2个步骤。

 

 

此外,还有几个常用的注解,我们有必要了解一下。

@Data
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder

@Getter,顾名思义就是为实体属性增加 get 方法。@Setter,就是给属性增加 set 方法。@Getter + @Setter = @Data

当然,我们还可以限制属性的 set 属性在哪些包中可以用,比如限制在相同的包下可以使用:@Setter(AccessLevel.PACKAGE)

效果,如果不在相同的包下使用,并且还使用了 setXXX 的方式注入属性,则报错。编译不通过。这个在 DDD 思想中,有很重要的作用:在业务层的实体属性不允许使用 set 方法给属性注入值,避免数据被篡改。

getset java实体类 注解 java实体类上添加注解_Data_07

编译不通过效果图:

getset java实体类 注解 java实体类上添加注解_Lombok_08

 

再说其它几个注解:

@NoArgsConstructor 是无参构造函数,如果是 @NoArgsConstructor(access = AccessLevel.PACKAGE) 说明只有在相同的包下,才能使用无参构造函数,否则报错。

@AllArgsConstructor 是全部参数的构造函数,如果是 @AllArgsConstructor(staticName = "of") 说明要想构造一个全部参数的实体,必须按照参数的定义顺序依次填写属性,当然,of 也可以改为其它单词,一般行业都喜欢用 of。如图:

UserEntity u = UserEntity.of(1,"名字","123","描述");

getset java实体类 注解 java实体类上添加注解_属性值_09

@Builder 是也是构造器的意思,不过比 of 的构造器灵活,你可以根据需要来构造属性值,不一定把属性全部构造,我们在使用老外封装的接口,经常可以把很多属性使用 . 来赋值,就是这个原理,如:

UserEntity e = UserEntity.builder()
                .id(11)
                .userName("流放")
                .password("abc")
                .build();

getset java实体类 注解 java实体类上添加注解_实体类_10

 

OK,lombok 的插件讲解到这,老铁,帮助到你了吗?