Lombok 使用攻略

1. Lombok 简介

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

   Lombok 既是一个 IDE 插件,也是一个项目要依赖的 jar 包。

   Lombok 依赖 jar 包的原因是因为编译时要用它的注解。插件的原因是他要在编译器编译时通过操作 AST (抽象语法树)改变字节码生成。

   也就是说它可以改变 Java 语法. 它不像 Spring 的依赖注入或者 Hibernate 的 orm 一样是运行时的特性,而是编译时的特性。

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

2. 使用方式  

 Maven 坐标:

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>

    IDEA 安装插件:

   编译时启用注解处理:

3. 项目实战

  不使用 Lombok @Data:

public class Student{
    private int age = 10;
    private String name;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    protected void setName(String name) {
        this.name = name;
    }
}

   使用 Lombok @Data (编译时为所有字段添加@ToString/@EqualsAndHashCode/@Getter/为非final字段添加@Setter/@RequiredArgsConstructor):

@Data
public class Student{
    private int age = 10;
    private String name;
}

   不使用  Lombok @CleanUp:

        InputStream in = new FileInputStream(args[0]);
        try {
            OutputStream out = new FileOutputStream(args[1]);
            try {
                byte[] b = new byte[10000];
                while (true) {
                    int r = in.read(b);
                    if (r == -1) {
                        break;
                    }
                    out.write(b, 0, r);
                }
            } finally {
                if (out != null) {
                    out.close();
                }
            }
        } finally {
            if (in != null) {
                in.close();
            }

        }

   使用 Lombok@CleanUp(在编译时添加调用close方法):

        @Cleanup InputStream inputStream = new FileInputStream(args[0]);
        @Cleanup OutputStream outputStream = new FileOutputStream(args[1]);
        byte[] b = new byte[10000];
        while (true) {
            int r = inputStream.read(b);
            if (r == -1) break;
            outputStream.write(b, 0, r);
        }

   当然还有比 @Data 粒度更小的注解,比如 @Getter、@Setter、@NoArgsConstructor,更多注解:https://projectlombok.org/features/all

 

posted @ 2018-03-30 17:56  Orson  阅读(5409)  评论(0编辑  收藏  举报