lombok:减少常见的,重复的代码开发

背景

今天学习时突然发现一个@Slf4j这个注解,是来自lombok的
之前只了解到getter和setter,看到这个于是去学习了一下。

lombok简介

在官网上,lombok定了如下多种注解,
@Cleanup
@Getter, @Setter
@EqualsAndHashCode
@Constructor
@Data & @Value
@SneakyThrows
@Synchronize
@Getter(lazy=true)
@Log
等等,都是为了减少重复开发成本来用的

demo

比如针对getter和setter注解,官网的例子就是
用lombok

import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;

public class GetterSetterExample {
  @Getter @Setter private int age = 10;
  
  @Setter(AccessLevel.PROTECTED) private String name;
  
  @Override public String toString() {
    return String.format("%s (age: %d)", name, age);
  }
}

效果等同于下面这段不用lombok

 public class GetterSetterExample {

  private int age = 10;

  private String name;
  
  @Override public String toString() {
    return String.format("%s (age: %d)", name, age);
  }
  
  public int getAge() {
    return age;
  }
  
  public void setAge(int age) {
    this.age = age;
  }
  
  protected void setName(String name) {
    this.name = name;
  }
}

争议

看了下lombok有争议的地方,主要在于他实现的原理上
http://jnb.ociweb.com/jnb/jnbJan2010.html#controversy
http://blog.enixjin.net/why-you-should-not-use-lombok/
http://blog.csdn.net/ghsau/article/details/52334762
主要在于他实现的原理(这里我没有深入了解),网上说法是用了

使用非公开的API,在知道在javac编译代码时
annotation processor的实例一定是JavacAnnotationProcessor(接口AnnotationProcessor的内部实现)
直接使用强制类型转换cast。再从JavacAnnotationProcessor的方法里面拿到抽象语法树(AST)做修改。

源码中比如AnnotationProcessorHider.java类就会去修改AST

个人理解

个人觉得适量用即可,比如@Log,@Getter,@Setter等即可
过多的引入,会影响代码的可读性。

refer

https://projectlombok.org/features/all 官网
http://himichaelchu.iteye.com/category/324280 使用demo集合

争议,原理介绍
http://jnb.ociweb.com/jnb/jnbJan2010.html#controversy
http://blog.enixjin.net/why-you-should-not-use-lombok/
http://blog.csdn.net/ghsau/article/details/52334762

你可能感兴趣的:(lombok:减少常见的,重复的代码开发)