1. 程式人生 > >Lombox外掛安裝,Log、Data、Value等註解詳情

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);