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幾個個註解:
val
,var
,@NonNull
,@Cleanup
,@Cleanup
,@Getter/@Setter
,@ToString
,@EqualsAndHashCode
,@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor
,@Data
,@Value
,@Builder
,@Value
,@SneakyThrows
,@Synchronized
,@Getter(lazy=true)
,@Log
,experimental
。
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
,註解在類上。自動重寫父類的hashCode
和 equals
方法
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);