Lombok 能够经过简单的注解来帮助咱们简化消除一些必须有但显得很臃肿的Java代码,经过使用对应的注解,能够在编译源码的时候生成对应的方法。ui
Lombok 既是一个 IDE 插件,也是一个项目要依赖的 jar 包。this
Lombok 依赖 jar 包的缘由是由于编译时要用它的注解。插件的缘由是他要在编译器编译时经过操做 AST (抽象语法树)改变字节码生成。spa
也就是说它能够改变 Java 语法. 它不像 Spring 的依赖注入或者 Hibernate 的 orm 同样是运行时的特性,而是编译时的特性。插件
官网地址:https://projectlombok.org3d
Maven 坐标:code
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
IDEA 安装插件:orm
编译时启用注解处理:blog
不使用 Lombok @Data:get
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):input
@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