在IDEA中使用了注解@Getter,但是发现在右侧出现private field 'xxx' is never assigned警告,加上一个@Setter就可以解决了。然后,感觉真的是多此一举,直接使用@Data就可以了。

  现在对lombok中常用的几个注解做一些说明。

1.类上加上@Data后的效果

  可以发现,已经存在set与get方法了。

  @Data注解 与 lombok_字节码

 

 

2.一些常用的注解

  @Data : 注在类上,提供类的get、set、equals、hashCode、canEqual、toString方法
  @AllArgsConstructor : 注在类上,提供类的全参构造
  @NoArgsConstructor : 注在类上,提供类的无参构造
  @Setter : 注在属性上,提供 set 方法
  @Getter : 注在属性上,提供 get 方法
  @EqualsAndHashCode : 注在类上,提供对应的 equals 和 hashCode 方法
  @Log4j/@Slf4j : 注在类上,提供对应的 Logger 对象,变量名为 log


3.原理

  Lombok本质上就是一个实现了“JSR 269 API”的程序。在使用javac的过程中,它产生作用的具体流程如下:

  • javac对源代码进行分析,生成了一棵抽象语法树(AST)
  • 运行过程中调用实现了“JSR 269 API”的Lombok程序
  • 此时Lombok就对第一步骤得到的AST进行处理,找到@Data注解所在类对应的语法树(AST),然后修改该语法树(AST),增加getter和setter方法定义的相应树节点
  • javac使用修改后的抽象语法树(AST)生成字节码文件,即给class增加新的节点(代码块)