Lombox插件安装,Log、Data、Value等注解详情

作用

Lombox是个IDE插件,通过在代码里写lombox官方提供的注解能自动生成代码,有助于优化代码简洁性,消除臃肿,当然如果不用也可以,只是要多写几行代码,比如POJO类里的getter和setter方法等。

使用步骤

在IDE里安装lombox插件

eclipse安装步骤:
1. 下载Lombok.jar,可以从官文或网络上下载jar包
2. 将 lombok.jar 复制到 myeclipse.ini / eclipse.ini 所在的文件夹目录下
3. 打开 eclipse.ini / myeclipse.ini,在最后面插入以下两行并保存:

    -Xbootclasspath/a:lombok.jar
  -javaagent:lombok.jar

4.重启 eclipse / myeclipse

IDEA里安装步骤:
这个比较简单,打开工具,依次弹出界面File->Setting->Plugins->Browse Repositories 搜索lombox插件,然后在右边点击“安装”即可安装。然后在设置面板里让注解生效Build,Execution,Deployment->Compiler->Annotation Processors->Enable annotation processing勾选

添加Maven依赖

目的是引入注解,供插件生成代码。
最新版本可从maven仓库里查

<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.10</version>
    </dependency>
</dependencies>

注解

lombok使用过程中主要是靠注解起作用的。
官方注解列表

总共10几个个注解:
valvar@NonNull,@Cleanup@Cleanup@Getter/@Setter@ToString@EqualsAndHashCode@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor@Data@Value@Builder@Value@SneakyThrows@Synchronized@Getter(lazy=true)@Logexperimental

1.@NonNull空指针过滤,帮助我们校验参数是否是空指针。注解在参数上,如果该参数为null 会throw new NullPointerException(参数名);
使用lombok:

public NonNullExample(@NonNull Person person) {
    super("Hello");
    this.name = person.getName();
  }

未使用

public NonNullExample(Person person) {
    super("Hello");
    if (person == null) {
      throw new NullPointerException("person");
    }
    this.name = person.getName();
  }

2.@Cleanup,注解在变量前。自动回收资源,默认调用close()方法
例如:

   @Cleanup InputStream in = new FileInputStream(args[0]);
  @Cleanup OutputStream out = new FileOutputStream(args[1]);

3.@Getter/@Setter,注解在属性上或类上。为属性提供 setting/getting方法
4.@ToString,注解在类上。自动生成toString()方法
5.@EqualsAndHashCode,注解在类上。自动重写父类的hashCodeequals方法
6.生成构造方法的annotation一共有三个。
@NoArgsConstructor : 注解在类上。生成一个无参数的构造方法,这个annotation在与其他的annotation配合起来使用的时候更加能凸显出他的重要性,例如在使用hibernate这种框架的时候,如果有一个有参数的构造方法的时候,NoArgsConstructor会展示出他的作用。

@RequiredArgsConstructor: 注解在类上。会生成一个包含常量和标识了NotNull的变量 的构造方法。生成的构造方法是private,如何想要对外提供使用可以使用staticName选项生成一个static方法。

@AllArgsContructor: 注解在类上。 会生成一个包含所有变量,同时如果变量使用了NotNull annotation , 会进行是否为空的校验

7.@Data.注解在类上。All together now: A shortcut for @ToString, @EqualsAndHashCode, @Getter on all fields, and @Setter on all non-final fields, and @RequiredArgsConstructor!.意思是自动为所有字段添加@ToString, @EqualsAndHashCode, @Getter方法,为非final字段添加@Setter,和@RequiredArgsConstructor!
默认生成的所有的代码都是public的,如果需要不同权限修饰符可以使用AccessLevel.NONE选项
例如

import lombok.AccessLevel;
import lombok.Setter;
import lombok.Data;
import lombok.ToString;

@Data 
public class DataExample {
  private final String name;
  @Setter(AccessLevel.PACKAGE) private int age;
  private double score;
  private String[] tags;

  @ToString(includeFieldNames=true)
  @Data(staticConstructor="of")
  public static class Exercise<T> {
    private final String name;
    private final T value;
  }
}

8.@Value,注解在类上。它在编译是自动添加Getter、toString()、equals()、hashCode()以及一个全参的构造器。
与@Data对应,主要区别就是如果变量不加@NonFinal ,@Value会给所有的弄成final的。当然如果是final的话,就没有set方法了。

import lombok.AccessLevel;
import lombok.experimental.NonFinal;
import lombok.experimental.Value;
import lombok.experimental.Wither;
import lombok.ToString;

@Value public class ValueExample {
  String name;
  @Wither(AccessLevel.PACKAGE) @NonFinal int age;
  double score;
  protected String[] tags;

  @ToString(includeFieldNames=true)
  @Value(staticConstructor="of")
  public static class Exercise<T> {
    String name;
    T value;
  }
}

9.@Log,注解在类上。日志注解,自动生成一个名为log静态final变量的日志对象,实例化的类可直接使用该变量。
即注解@Log的能类自动生成private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(XXX.getName());变量。
这里也提供了几种其它日志形势的注解包括log4j和Slf4j,但变量不变,还是static final log .

@CommonsLog
Creates private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);

@JBossLog
Creates private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);

@Log
Creates private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());

@Log4j
Creates private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);

@Log4j2
Creates private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);

@Slf4j
Creates private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);

@XSlf4j
Creates private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);

猜你喜欢

转载自blog.csdn.net/achenyuan/article/details/80018228