1. 程式人生 > >lombok常用註解

lombok常用註解

   Lombok主要常用的註解有:@Data,@getter,@setter,@NoArgsConstructor,@AllArgsConstructor,@ToString,@EqualsAndHashCode,@Slf4j,@Log4j。我們一個一個來看:

@Data註解:在JavaBean或類JavaBean中使用,這個註解包含範圍最廣,它包含getter、setter、NoArgsConstructor、equals、canEqual、hashCode、toString 註解,即當使用當前註解時,會自動生成包含的所有方法;

 

@getter註解:在JavaBean或類JavaBean中使用,使用此註解會生成對應的getter方法;

@setter註解:在JavaBean或類JavaBean中使用,使用此註解會生成對應的setter方法;

@NoArgsConstructor註解:在JavaBean或類JavaBean中使用,使用此註解會生成對應的無參構造方法;

@AllArgsConstructor註解:在JavaBean或類JavaBean中使用,使用此註解會生成對應的有參構造方法;

@ToString註解:在JavaBean或類JavaBean中使用,使用此註解會自動重寫對應的toStirng方法;

@EqualsAndHashCode註解:在JavaBean或類JavaBean中使用,使用此註解會自動重寫對應的equals方法和hashCode方法;

@Slf4j:在需要列印日誌的類中使用,當專案中使用了slf4j列印日誌框架時使用該註解,會簡化日誌的列印流程,只需呼叫info方法即可;

@Log4j:在需要列印日誌的類中使用,當專案中使用了log4j列印日誌框架時使用該註解,會簡化日誌的列印流程,只需呼叫info方法即可;

在使用以上註解需要處理引數時,處理方法如下(以@ToString註解為例,其他註解同@ToString註解):

@ToString(exclude="column")

意義:排除column列所對應的元素,即在生成toString方法時不包含column引數;

@ToString(exclude={"column1","column2"})

意義:排除多個column列所對應的元素,其中間用英文狀態下的逗號進行分割,即在生成toString方法時不包含多個column引數;

@ToString(of="column")

意義:只生成包含column列所對應的元素的引數的toString方法,即在生成toString方法時只包含column引數;;

@ToString(of={"column1","column2"})

意義:只生成包含多個column列所對應的元素的引數的toString方法,其中間用英文狀態下的逗號進行分割,即在生成toString方法時只包含多個column引數;
--------------------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  • val:用在區域性變數前面,相當於將變數宣告為final
  • @NonNull:給方法引數增加這個註解會自動在方法內對該引數進行是否為空的校驗,如果為空,則丟擲NPE(NullPointerException)
  • @Cleanup:自動管理資源,用在區域性變數之前,在當前變數範圍內即將執行完畢退出之前會自動清理資源,自動生成try-finally這樣的程式碼來關閉流
  • @Getter/@Setter:用在屬性上,再也不用自己手寫setter和getter方法了,還可以指定訪問範圍
  • @ToString:用在類上,可以自動覆寫toString方法,當然還可以加其他引數,例如@ToString(exclude=”id”)排除id屬性,或者@ToString(callSuper=true, includeFieldNames=true)呼叫父類的toString方法,包含所有屬性
  • @EqualsAndHashCode:用在類上,自動生成equals方法和hashCode方法
  • @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor:用在類上,自動生成無參構造和使用所有引數的建構函式以及把所有@NonNull屬性作為引數的建構函式,如果指定staticName = “of”引數,同時還會生成一個返回類物件的靜態工廠方法,比使用建構函式方便很多
  • @Data:註解在類上,相當於同時使用了@ToString@EqualsAndHashCode@Getter@Setter@RequiredArgsConstrutor這些註解,對於POJO類十分有用
  • @Value:用在類上,是@Data的不可變形式,相當於為屬性新增final宣告,只提供getter方法,而不提供setter方法
  • @Builder:用在類、構造器、方法上,為你提供複雜的builder APIs,讓你可以像如下方式一樣呼叫Person.builder().name("Adam Savage").city("San Francisco").job("Mythbusters").job("Unchained Reaction").build();更多說明參考Builder
  • @SneakyThrows:自動拋受檢異常,而無需顯式在方法上使用throws語句
  • @Synchronized:用在方法上,將方法宣告為同步的,並自動加鎖,而鎖物件是一個私有的屬性$lock$LOCK,而java中的synchronized關鍵字鎖物件是this,鎖在this或者自己的類物件上存在副作用,就是你不能阻止非受控程式碼去鎖this或者類物件,這可能會導致競爭條件或者其它執行緒錯誤
  • @Getter(lazy=true):可以替代經典的Double Check Lock樣板程式碼
  • @Log:根據不同的註解生成不同型別的log物件,但是例項名稱都是log,有六種可選實現類
    • @CommonsLog Creates log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
    • @Log Creates log = java.util.logging.Logger.getLogger(LogExample.class.getName());
    • @Log4j Creates log = org.apache.log4j.Logger.getLogger(LogExample.class);
    • @Log4j2 Creates log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
    • @Slf4j Creates log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
    • @XSlf4j Creates log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);