前言
Lombok 是一種 Java™ 實用工具,可用來幫助開發人員消除 Java 的冗長,尤其是對于簡單的 Java 對象(POJO)。它通過注解實作這一目的。
安裝Lombok
打開 IDEA 的 Settings 面闆,并選擇 Plugins 選項,然後點選 “Browse repositories”
在輸入框輸入”lombok”,得到搜尋結果,點選安裝,然後安裝提示重新開機 IDEA,安裝成功;

image.png
引入依賴
在自己的項目裡添加 lombok 的編譯支援,在 pom 檔案裡面添加 dependency
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<scope>provided</scope>
</dependency>
注解簡述
- @Data =
get + set + equal + canEqual + hashCode + toString
- @Setter
- @Getter
- @Slf4j
注解在 類 上;為類提供一個 屬性名為 log 的日志對象,提供預設構造方法。
- @AllArgsConstructor
注解在 類 上;為類提供一個全參的構造方法
- @NoArgsConstructor
注解在 類 上;為類提供一個無參的構造方法。
- @EqualsAndHashCode
注解在 類 上, 可以生成 equals、canEqual、hashCode 方法。
- @NonNull
注解在 屬性 上,會自動産生一個關于此參數的非空檢查,如果參數為空,則抛出一個空指針異常
- @Cleanup
這個注解用在 變量 前面,可以保證此變量代表的資源會被自動關閉
- @ToString
這個注解用在 類 上,可以生成所有參數的 toString 方法,還會生成預設的構造方法
- @RequiredArgsConstructor
這個注解用在 類 上,使用類中所有帶有 @NonNull 注解的或者帶有 final 修飾的成員變量生成對應的構造方法。
- @Value
這個注解用在 類 上,會生成含所有參數的構造方法,get 方法,此外還提供了equals、hashCode、toString 方法。
- @SneakyThrows
這個注解用在 方法 上,可以将方法中的代碼用 try-catch 語句包裹起來,捕獲異常并在 catch 中用 Lombok.sneakyThrow(e) 把異常抛出,可以使用 @SneakyThrows(Exception.class) 的形式指定抛出哪種異常
- @Synchronized
這個注解用在 類方法 或者 執行個體方法 上,效果和 synchronized 關鍵字相同
注解詳解
@Data
注解在 類 上;提供類所有屬性的 get 和 set 方法,此外還提供了equals、canEqual、hashCode、toString 方法。
mark
注解在 屬性 上;為單個屬性提供 set 方法; 注解在 類 上,為該類所有的屬性提供 set 方法, 都提供預設構造方法。
注解在 屬性 上;為單個屬性提供 get 方法; 注解在 類 上,為該類所有的屬性提供 get 方法,都提供預設構造方法。
注解在 類 上;為類提供一個 屬性名為 log 的日志對象,提供預設構造方法。
//類上面注解了,直接調用 log 即可:
log.info(xxxx);
注解在 類 上;為類提供一個全參的構造方法,加了這個注解後,類中不提供預設構造方法了。
注解在 類 上;為類提供一個無參的構造方法。
注解在 類 上, 可以生成 equals、canEqual、hashCode 方法。
注解在 屬性 上,會自動産生一個關于此參數的非空檢查,如果參數為空,則抛出一個空指針異常,也會有一個預設的無參構造方法。
這個注解用在 變量 前面,可以保證此變量代表的資源會被自動關閉,預設是調用資源的 close() 方法,如果該資源有其它關閉方法,可使用 @Cleanup(“methodName”) 來指定要調用的方法,也會生成預設的構造方法
這個注解用在 類 上,可以生成所有參數的 toString 方法,還會生成預設的構造方法。
它們都有三個參數可以設定
1、
String staticName() default "";
如果設定了它,将原來的構造方法的通路修飾符将會變成 私有的,而外添加一個靜态構造方法,參數相同,名字是設定的字元串的名字,通路修飾符為公有的。
2、
AnyAnnotation[] onConstructor() default {};
在構造方法上添加注解。使用方法
@RequiredArgsConstructor(onConstructor=@__({@AnnotationsGoHere}))}
例如我們在 Spring 項目中需要注入多個值,寫很多個 @Autowired 很麻煩,就可以使用這種方式:
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class UserServiceImpl implements IUserService {
private final IUserRepository userRepository;
private final IOrderRepository orderRepository;
………………
3、
AccessLevel access() default lombok.AccessLevel.PUBLIC;
構造函數通路修飾符;
這個注解用在 類 上,會生成含所有參數的構造方法,get 方法,此外還提供了equals、hashCode、toString 方法。
這個注解用在 方法 上,可以将方法中的代碼用 try-catch 語句包裹起來,捕獲異常并在 catch 中用 Lombok.sneakyThrow(e) 把異常抛出,可以使用 @SneakyThrows(Exception.class) 的形式指定抛出哪種異常,也會生成預設的構造方法。
這個注解用在 類方法 或者 執行個體方法 上,效果和 synchronized 關鍵字相同,差別在于鎖對象不同,對于類方法和執行個體方法,synchronized 關鍵字的鎖對象分别是類的 class 對象和 this 對象,而 @Synchronized 的鎖對象分别是 私有靜态 final 對象 lock 和 私有 final 對象 lock,當然,也可以自己指定鎖對象,此外也提供預設的構造方法。
總結
本文主要站在巨人的肩上,文章内容來源一下三篇文章。本文主要提取了三篇文章中的優點整合而成。
文章參考: