Lombok 简单说明

Lombok 注解在线帮助文档:http://projectlombok.org/features/index.

常用的 Lombok 注解

注解说明
@Data注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
@Value用在类上,是@Data的不可变形式,相当于为属性添加final声明,只提供getter方法,而不提供setter方法
@Setter注解在类上和属性上;为属性提供 setting 方法
@Getter注解在类上和属性上;为属性提供 getting 方法
@NoArgsConstructor注解在类上;为类提供一个无参的构造方法
@AllArgsConstructor注解在类上;为类提供一个全参的构造方法
@ToString生成 toString 方法
@Builder用在类、构造器、方法上,为你提供复杂的builder APIs
@SneakyThrows自动抛受检异常,而无需显式在方法上使用throws语句

日志注解

@Log:根据不同的注解生成不同类型的log对象,但是实例名称都是log,有六种可选实现类。

注解说明
@CommonsLoglog = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
@Loglog = java.util.logging.Logger.getLogger(LogExample.class.getName());
@Log4jlog = org.apache.log4j.Logger.getLogger(LogExample.class);
@Log4j2log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
@Slf4jlog = org.slf4j.LoggerFactory.getLogger(LogExample.class);
@XSlf4jlog = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);

Lombok原理

  了解了简单的使用之后,现在应该比较好奇它是如何实现的。整个使用的过程中,只需要使用注解而已,不需要做其它额外的工作,那玄妙之处应该是在注解的解析上。 
   
JDK5引入了注解的同时,也提供了两种解析方式。

运行时解析

  运行时能够解析的注解,必须将 @Retention 设置为 RUNTIME ,这样可以通过反射拿到该注解。 
  

编译时解析(Lombok使用)

编译时解析有两种机制:

1.Annotation Processing Tool

  apt自JDK5产生,JDK7已标记为过期,不推荐使用,JDK8中已彻底删除,自JDK6开始,可以使用Pluggable Annotation Processing API来替换它,apt被替换主要有2点原因:

  • api都在com.sun.mirror非标准包下
  • 没有集成到javac中,需要额外运行

2.Pluggable Annotation Processing API

  JSR 269,自JDK6加入,作为apt的替代方案,它解决了apt的两个问题,javac在执行的时候会调用实现了该API的程序,这样我们就可以对编译器做一些增强,这时javac执行的过程如下:

这里写图片描述

  Lombok就是使用这种方式实现的,有兴趣的话可以去看看其Lombok源码,对应注解的实现都在HandleXXX中,比如@Getter注解的实现是HandleGetter.handle()。还有一些其它类库使用这种方式实现,比如Google Auto、Dagger等等。 
  

Lombok问题

  1. 无法支持多种参数构造器的重载。
  2. 会降低代码可读性。

转载于:https://my.oschina.net/glenxu/blog/1808207

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值