Lombok开发指南
轉(zhuǎn)載自:http://codepub.cn/2015/07/30/Lombok-development-guidelines/
Lombok簡介
Lombok是一款好用順手的工具,就像Google Guava一樣,在此予以強(qiáng)烈推薦,每一個(gè)Java工程師都應(yīng)該使用它。Lombok是一種Java?實(shí)用工具,可用來幫助開發(fā)人員消除Java的冗長代碼,尤其是對于簡單的Java對象(POJO)。它通過注釋實(shí)現(xiàn)這一目的。通過在開發(fā)環(huán)境中實(shí)現(xiàn)Lombok,開發(fā)人員可以節(jié)省構(gòu)建諸如hashCode()和equals()這樣的方法以及以往用來分類各種accessor和mutator的大量時(shí)間。
Lombok官網(wǎng)地址:https://projectlombok.org/ 里面還提供了一個(gè)簡短的學(xué)習(xí)視頻。
安裝Lombok
Eclipse安裝Lombok
1.雙擊Jar安裝
首先下載Jar包,下載地址:http://projectlombok.org/download.html
注意如果eclipse沒有安裝到默認(rèn)目錄,那么需要點(diǎn)擊Specify選擇eclipse.exe所在的路徑,然后Install即可完成安裝。
在新建項(xiàng)目之后,使用Lombok如果程序還報(bào)錯(cuò),那么點(diǎn)擊eclipse菜單的Project選項(xiàng)的clean,清理一下即可。
2.Eclipse手動(dòng)安裝Lombok步驟
- 將lombok.jar復(fù)制到myeclipse.ini/eclipse.ini所在的文件夾目錄下
- 打開eclipse.ini/myeclipse.ini,在最后面插入以下兩行并保存:
-Xbootclasspath/a:lombok.jar
-javaagent:lombok.jar - 重啟eclipse/myeclipse
最后需要注意的是,在使用lombok注解的時(shí)候記得要導(dǎo)入lombok.jar包到工程,如果使用的是Maven Project,要在pom.xml中添加依賴,并設(shè)置Maven為自動(dòng)導(dǎo)入,參見IntelliJ部分。
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.8</version> </dependency>IntelliJ安裝Lombok
1.通過IntelliJ的插件中心安裝
注意一點(diǎn),在IntelliJ中如果創(chuàng)建的是Maven項(xiàng)目,那么在pom.xml文件中添加依賴后,需要設(shè)置Maven為自動(dòng)導(dǎo)入。
2.IntelliJ手動(dòng)安裝Lombok
如果不想通過IntelliJ的插件中心安裝的話,也可以手動(dòng)安裝,詳細(xì)步驟參見Github上的說明:https://github.com/mplushnikov/lombok-intellij-plugin
簡單點(diǎn)說手動(dòng)安裝步驟如下:
Download the latest release and install it manually using Preferences > Plugins > Install plugin from disk…
Lombok用法
Lombok注解說明
- val:用在局部變量前面,相當(dāng)于將變量聲明為final
@NonNull:給方法參數(shù)增加這個(gè)注解會自動(dòng)在方法內(nèi)對該參數(shù)進(jìn)行是否為空的校驗(yàn),如果為空,則拋出NPE(NullPointerException) - @Cleanup:自動(dòng)管理資源,用在局部變量之前,在當(dāng)前變量范圍內(nèi)即將執(zhí)行完畢退出之前會自動(dòng)清理資源,自動(dòng)生成try-finally這樣的代碼來關(guān)閉流
- @Getter/@Setter:用在屬性上,再也不用自己手寫setter和getter方法了,還可以指定訪問范圍
- @ToString:用在類上,可以自動(dòng)覆寫toString方法,當(dāng)然還可以加其他參數(shù),例如@ToString(exclude=”id”)排除id屬性,或者@ToString(callSuper=true, includeFieldNames=true)調(diào)用父類的toString方法,包含所有屬性
- @EqualsAndHashCode:用在類上,自動(dòng)生成equals方法和hashCode方法
- @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor:用在類上,自動(dòng)生成無參構(gòu)造和使用所有參數(shù)的構(gòu)造函數(shù)以及把所有@NonNull屬性作為參數(shù)的構(gòu)造函數(shù),如果指定staticName = “of”參數(shù),同時(shí)還會生成一個(gè)返回類對象的靜態(tài)工廠方法,比使用構(gòu)造函數(shù)方便很多
- @Data:注解在類上,相當(dāng)于同時(shí)使用了@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstrutor這些注解,對于POJO類十分有用
- @Value:用在類上,是@Data的不可變形式,相當(dāng)于為屬性添加final聲明,只提供getter方法,而不提供setter方法
- @Builder:用在類、構(gòu)造器、方法上,為你提供復(fù)雜的builder APIs,讓你可以像如下方式一樣調(diào)用Person.builder().name(“Adam Savage”).city(“San Francisco”).job(“Mythbusters”).job(“Unchained Reaction”).build();更多說明參考Builder
- @SneakyThrows:自動(dòng)拋受檢異常,而無需顯式在方法上使用throws語句
- @Synchronized:用在方法上,將方法聲明為同步的,并自動(dòng)加鎖,而鎖對象是一個(gè)私有的屬性[Math Processing Error]lock或LOCK,而java中的synchronized關(guān)鍵字鎖對象是this,鎖在this或者自己的類對象上存在副作用,就是你不能阻止非受控代碼去鎖this或者類對象,這可能會導(dǎo)致競爭條件或者其它線程錯(cuò)誤
- @Getter(lazy=true):可以替代經(jīng)典的Double Check Lock樣板代碼
- @Log:根據(jù)不同的注解生成不同類型的log對象,但是實(shí)例名稱都是log,有六種可選實(shí)現(xiàn)類
- @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);
Lombok使用示例
- val示例
- @NonNull示例
- @Cleanup示例
- @Getter/@Setter示例
- @ToString示例
- @EqualsAndHashCode示例
- @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor示例
- @Data示例
在IntelliJ中按下Ctrl+F12就可以看到Lombok已經(jīng)為我們自動(dòng)生成了一系列的方法。
- @Value示例
- @Builder示例
- @SneakyThrows示例
- @Synchronized示例
- @Getter(lazy = true)
相當(dāng)于如下所示
import java.util.concurrent.atomic.AtomicReference; public class GetterLazyExample {private final AtomicReference<java.lang.Object> cached = new AtomicReference<>();public double[] getCached() {java.lang.Object value = this.cached.get();if (value == null) {synchronized (this.cached) {value = this.cached.get();if (value == null) {final double[] actualValue = expensive();value = actualValue == null ? this.cached : actualValue;this.cached.set(value);}}}return (double[]) (value == this.cached ? null : value);}private double[] expensive() {double[] result = new double[1000000];for (int i = 0; i < result.length; i++) {result[i] = Math.asin(i);}return result;} }總結(jié)
以上是生活随笔為你收集整理的Lombok开发指南的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java JDBC中,MySQL字段类型
- 下一篇: IDEA下的使用git