Lombok是什么
lombok是一個可以通過簡單的注解的形式來幫助我們簡化消除一些必須有但顯得很臃腫的 Java 代碼的工具,簡單來說,比如我們新建了一個類,然后在其中寫了幾個字段,然后通常情況下我們需要手動去建立getter和setter方法啊,構造函數啊之類的,及對象的toString等方法,特別是相對于 POJO;lombok的作用就是為了省去我們手動創(chuàng)建這些代碼的麻煩,它能夠在我們編譯源碼的時候自動幫我們生成這些方法。
Lombok能夠達到的效果就是在源碼中不需要寫一些通用的方法,但是在編譯生成的字節(jié)碼文件中會幫我們生成這些方法,這就是lombok的神奇作用。
雖然IDE里面都自帶自動生成這些方法的功能,但是使用lombok會使你的代碼看起來更加簡潔,寫起來也更加方便。
如何使用Lombok?
1.在IDEA中下載Lombok的插件
操作步驟:文件→設置→Plugins→Browse repositories...
在搜索框中輸入Lombok,選擇Lombok Plugin插件下載安裝后重啟IDEA就可以了
2.添加Lombok的依賴
版本(Mar 23, 2017)
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.16</version>
</dependency>
Lombok的主要用法:
@NonNull
: 可以幫助我們避免空指針。作用在方法參數上的注解,用于自動生成空值參數檢查。
@Cleanup
: 自動幫我們調用close()方法。作用在局部變量上,在作用域結束時會自動調用close方法釋放資源。
@Getter / @Setter
: 自動生成Getter/Setter方法, 作用在字段上,作用在類上,會自動生成該類所有非靜態(tài)字段的Getter/Setter
@ToString
類注解,自動生成類的toString方法,可以做一些定制,比如不使用某個字段,不調用Getters等。
@EqualsAndHashCode
類注解,自動生成類中所有非靜態(tài)非瞬時字段的equals方法和hashCode方法。
@NoArgsConstructor
: 自動生成無參數構造函數。
@AllArgsConstructor
: 自動生成全參數構造函數。
@RequiredArgsConstructor
類注解,為final字段和標記了@NotNull的字段生成構造函數。
@Data
類注解:
自動為所有字段添加@ToString, @EqualsAndHashCode, @Getter,為非final字段添加@Setter,和@RequiredArgsConstructor
@Value
類注解,和@Data
類似,所有字段都為private,自動生成Getter但是沒有Setter,會生成初始化所有字段的構造函數。相當于同時應用了final @ToString
、 @EqualsAndHashCode
、 @AllArgsConstructor
、@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
和 @Getter
。
lombok的缺點:
1、使用lombok雖然能夠省去手動創(chuàng)建setter和getter方法的麻煩,但是卻大大降低了源代碼文件的可讀性和完整性,降低了閱讀源代碼的舒適度。
2、在JSR-269的規(guī)范里面,并沒有提供修改AST的API,那么lombok是怎么達到它的目的的?It's a total hack. Using non-public API.這是lombok的作者所說的。也就是說lombok是使用了一些內部的API,也許是通過強制類型轉換也許是其他,如果某天發(fā)布的新版本JDK修改了那些內部API,那么我們使用了lombok的代碼在那個版本的JDK上面將無法編譯通過。
Lombok的官網:https://projectlombok.org/
Lombok的官方文檔:https://projectlombok.org/features/index.html
Lombok的github地址:https://github.com/rzwitserloot/lombok