03_JAVA奇技淫巧简化代码之lombok

文章转载自:https://blog.52itstyle.com/archives/1418/

最近在做一个小功能,又不想在原有体态臃肿的项目中追加,为了调试方便并且可以快速开发就采用了springboot。由于使用了JPA,建了几个类,然后通过IDE去生成其属性的构造器、getter、setter、equals、hashcode、toString方法,那么Java中有没有一种方式能够避免这种重复的劳动呢?答案是有,想着前几天听说有一款简化神奇Lombok,特此拿来玩玩记录一下。

一、简介

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

官方地址:https://projectlombok.org/

github地址:https://github.com/rzwitserloot/lombok

二、Lombok注解

下面对Lombok的简单使用方法做一下总结:

@NotNull 作用在方法参数上的注解,用于自动生成空值参数检查。
@Cleanup 作用在局部变量上,在作用域结束时会自动调用close方法释放资源。
@Getter 作用在字段上,会自动生成字段的Getter;作用在类上,会自动生成该类所有非静态字段的Getter,还能控制Getter的访问级别
@Setter 基本同上。
@ToString 类注解,自动生成类的toString方法,可以做一些定制,比如不使用某个字段,不调用Getters等。
@EqualsAndHashCode 类注解,自动生成类中所有非静态非瞬时字段的equals方法和hashCode方法。
@NoArgsConstructor 类注解,自动生成一个无参构造函数。
@AllArgsConstructor 类注解,生成一个初始化所有字段的构造函数。
@RequiredArgsConstructor 类注解,为final字段和标记了@NotNull的字段生成构造函数。
@Data 类注解,相当于同时应用了@Getter、@Setter、@ToString、@EqualsAndHashCode、@RequiredArgsConstructor。如果已经定义了一个构造方法,就不会再自动生成构造方法了。
@Value 类注解,和@Data类似,但是用于不可变类型。生成的类和所有字段都设置为final,所有字段都为private,自动生成Getter但是没有Setter,会生成初始化所有字段的构造函数。相当于同时应用了final @ToString、 @EqualsAndHashCode、 @AllArgsConstructor 、@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)和 @Getter。
实际开发中一般常用到的:
@Data
@NoArgsConstructor
@AllArgsConstructor
这三个,其他的没特殊需求可以自行忽略。

三、maven引用

由于开发中我们使用了Maven,直接在pom.xml中引入以下坐标:

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

下面是简单Bean示例:

@Data         // 生成 getter/setter/equals/canEqual/hashCode/toString        
@NoArgsConstructor     // 为类提供一个无参的构造方法 
@AllArgsConstructor    // 为类提供一个全参的构造方法
public class User {
   private Integer id;
   private String name;
   private Integer age;
}

为了对比效果,下面是我们平时生成的Bean:

public class User {
    private Integer id;
    private String name;
    private Integer age;
    public User() {
        super();
    }
    public User(Integer id, String name, Integer age) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}

可以看到,由于应用了@Data注解和两个构造方法注解,代码变得非常短小易读。当然Lombok也是存在诸多问题的,比如无法支持多种参数构造器的重载,需要安装IDE插件实现get,set效果。

Lombok原理

虽然Lombok也用到了注解,但是它并没有用到反射,而是通过一些奇技淫巧,在代码编译时期动态将注解替换为具体的代码。所以JVM实际运行的代码,和我们手动编写的包含了各种工具方法的类相同。

四、插件安装

其实,一开始博主以为不需要任何插件支持的,即使项目中引入了坐标,当你get属性的时候也会报错。

官网中其实提供了相关的配置,由于使用的是Eclipse,这里简单的说下Eclipse种的安装步骤。

1.下载lombok.jar包 https://projectlombok.org/download.html

2.双击运行(有些系统安装的压缩包的问题可能无法执行)

1.png
2.png

3.重启Eclipse,然后update一下Maven项目即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,977评论 6 342
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,067评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,822评论 25 709
  • 虚伪了一辈子, 装个什么 辛苦了一辈子, 为个什么 钻营了一辈子, 图个什么 努力了一辈子, 求个什么 毕生苦执实...
    再凑热闹阅读 85评论 0 0
  • 听说,唐代的女子走在街上,高兴起来是可以随便唱一段歌跳一段舞的,没有人会觉得奇怪,人们对此都习以为常,这种随性,让...
    优优红瓷阅读 136评论 0 0