Lombok使用

Lombok使用介绍

1. Lombok介绍及优点 

   在Java中,封装是一个非常好的机制,最常见的封装莫过于get,set方法了,无论是Intellij idea 还是Eclipse,都提供了快速生成get,set方法的快捷键,使用起来很是方便,其实,我们还有更方便的办法,就是今天的主角-Lombok。 Lombok是一个通过简单注解来精简代码达到消除冗余代码的目的,如通过注解的方式减少get,set方法,构造方法等。

    官网http://projectlombok.org

优点:1)提高编码效率

          2)使代码更简洁

         3)消除冗余代码

         4)避免修改字段名字时忘记修改方法名

注:IDE上必须要支持Lombok,否则IDE会报错

2. Lombok原理

说到 Lombok,我们就得提到 JSR 269: Pluggable Annotation Processing API (https://www.jcp.org/en/jsr/detail?id=269) 。自从Java 6起,javac就支持“JSR 269 Pluggable Annotation Processing API”规范,只要程序实现了该API,就能在javac运行的时候得到调用(javac是编译时)。Lombok实现了“JSR 269 API”,那么在编译源文件的时候就将源代码改变了。

javac在编译源码的具体流程如下:

1ea87e2ae295b1944f0fe344593ca21f43d.jpg

        首先是写好的源代码Source File,然后javac首先会对源代码进行一个分析,生成一棵抽象语法树(AST),接下来就是Annotation Processing(注解处理),在注解处理的过程中就调用了 实现了“JSR 269 API”规范的Lombok程序(Lombok Annotation Processor Lombok注解处理器),这时Lombok就会对刚生成的AST进行处理,处理过程是:例如我们有一个@Data注解(@Data注解在类上,相当于同时使用了@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstrutor这些注解,对于POJO类十分有用),Lombok Annotation Handler就负责找到@Data注解所在的类对应的语法树(AST),然后修改该AST(Modified AST),修改的主要内容就是在里面增加了 Getter、Setter等方法定义的相应树节点,然后Lombok Annotation Processor输出一个修改后的AST。javac拿到修改后的AST进行一个解析和生成,这个时候就生成了字节码文件。

3. Lombok引入到项目中

引入Lombok的方式有两种:

1)通过向lib文件夹中添加lombok.jar包即可

2)如果使用的是Maven,则可在项目的pom.xml文件中添加以下依赖:

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.18</version>
    <scope>provided</scope>
</dependency>

4. IDEA/Eclipse安装Lombok插件

1) IDEA 安装Lombok插件

c964df904c471500b4ad28a688c61891fd1.jpg

2) Eclipse安装Lombok插件

    首先需要手动下载 lombok-1.16.18.jar   (可直接在官网下载),然后双击运行该jar,选择自己的Eclipse,然后点击Install/Update进行安装

cc34458a33ffa851d1cad3e21d40729802c.jpg

 

提示如下信息,则说明安装插件成功

d443f00e4d418bf5ab83c91b055a467684d.jpg

在mac或Linux下,可能会由于权限问题导致安装失败,如下:

5d70f72e74186e342452edbf01d30baaa3a.jpg

这个时候只需要按照提示,用sudo权限执行该jar即可。

5. Lombok实战

Lombok一些常用及关键的注解:

  • @Data 该注解使用在上,该注解是最常用的注解,它结合了@ToString@EqualsAndHashCode @Getter@Setter,但是不包含全参构造和无参构造。 
  • @Getter和@Setter  用在属性上,自动生成getter和setter方法,还可以指定访问范围,如:@Getter(AccessLevel.PROTECTED)表示生成的getter方法的权限是Protected的,如果不加AccessLevel的话,默认是public的。
  • @NoArgsConstructor  该注解使用在上,该注解提供一个无参构造

  • @AllArgsConstructor  该注解使用在上,该注解提供一个全参数的构造方法,默认不提供无参构造。

  • @toString 该注解使用在上,该注解默认生成任何非讲台字段以名称-值的形式输出。如果需要可以通过注释参数includeFieldNames来控制输出中是否包含的属性名称。 可以通过exclude参数中包含字段名称,可以从生成的方法中排除特定字段,如@ToString(exclude=”id”)排除id属性;@ToString(exclude={“column1”,“column2”})排除两个字段;@ToString(of=”id”)@ToString(of={“column1”,“column2”})表示只要指定的字段。 可以通过callSuper参数控制父类的输出,如:@ToString(callSuper=true, includeFieldNames=true)

  • @EqualsAndHashCode  该注解使用在上,该注解在类级别注释会同时生成equalshashCode。也可以使用exclude排除某些字段不加入到重写equals和hashcode方法当中,如:@EqualsAndHashCode(exclude=”id”)排除id属性,跟@toString的一些参数是一样的。

  • log  注解在  上。有如下可选择可用:

//@CommonsLog
private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
//@JBossLog
private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);
//@Log
private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
//@Log4j
private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
//@Log4j2
private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
//@Slf4j
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
//@XSlf4j
private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);
 

6. 反编译大法

Java的反编译工具Java Decompiler,官网  http://jd.benow.ca/,下载反编译工具或IDE的插件。可以通过反编译工具反编译.class文件来验证Lombok自动生成的代码。

7. Lombok工作中需要注意的点

1)在类需要序列化、反序列化时详细控制字段时,例如:Jackson json序列化,当某些字段为空时,可能会控制在序列化的时候相应的key也不显示。这个时候就需要考虑是否使用Lombok。

2)使用Lombok虽然能够省去手动创建Getter和Setter等方法,但是却降低了源代码文件的可读性和完整性,降低了阅读源代码的舒适度。

3)使用@Slf4j还是@Log4j要根据项目所使用的日志框架来决定。

4)选择合适的地方来使用Lombok,例如POJO是一个好地方,POJO很单纯。

转载于:https://my.oschina.net/Declan/blog/2990073

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值