lombok在idea中安裝以及使用
一、lombok簡介
一個標準的java bean需要有getter和setter方法,有時候些程式碼很冗餘,而lombok可以簡化我們的程式碼,在原始碼中沒有getter和setter方法,但是在編譯生成的位元組碼檔案中有getter
和setter方法,這只是lombok其中的一個功能。
二、idea中安裝lombok
1、給 Idea 安裝 lombok外掛,Setting-->Plugins,搜尋lombok就會有提示,點選install即可,安裝之後要重啟idea(我外掛已經安裝了)
2、安裝重啟之後,還需要設定Settings > Build > Compiler > Annotation Processors,要不然會有lombok requires annotation processing提示。
三、lombok用法
我用的是gradle構建專案,首先加入依賴。
dependencies {
compile 'org.projectlombok:lombok:1.16.16'
}
1、val:用在區域性變數前面,相當於將變數宣告為final
2、@NonNull:給方法引數增加這個註解會自動在方法內對該引數進行是否為空的校驗,如果為空,則丟擲NPE(NullPointerException)
3、@Cleanup:自動管理資源,用在區域性變數之前,在當前變數範圍內即將執行完畢退出之前會自動清理資源,自動生成try-finally這樣的程式碼來關閉流
5、@ToString:用在類上,可以自動覆寫toString方法,當然還可以加其他引數,例如@ToString(exclude=”id”)排除id屬性,或者@ToString(callSuper=true,
includeFieldNames=true)呼叫父類的toString方法,包含所有屬性。
6、@EqualsAndHashCode:用在類上,自動生成equals方法和hashCode方法,按Ctrl + F12可以看到三個方法
canEqual(OBject),Equals(Object),hashCode()。
7、@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor:用在類上,自動生成無參構造和使用所有引數的建構函式以及把所有@NonNull屬性作為參
數的建構函式,如果指定staticName = “of”引數,同時還會生成一個返回類物件的靜態工廠方法,比使用建構函式方便很多。
8、@Data:註解在類上,相當於同時使用了@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstrutor這些註解,對於POJO類十分有用,按下
Ctrl+F12就可以看到Lombok已經為我們自動生成了一系列的方法。
9、@Value:用在類上,是@Data的不可變形式,相當於為屬性新增final宣告,只提供getter方法,而不提供setter方法
10、@SneakyThrows:自動拋受檢異常,而無需顯式在方法上使用throws語句
11、@Synchronized:用在方法上,將方法宣告為同步的,並自動加鎖,而鎖物件是一個私有的屬性$lock或$LOCK,而java中的synchronized關鍵字鎖物件是this,鎖在this或
者自己的類物件上存在副作用,就是你不能阻止非受控程式碼去鎖this或者類物件,這可能會導致競爭條件或者其它執行緒錯誤
12、@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);