摘要:提高編碼效率使代碼更簡潔消除冗長代碼避免修改字段名字時忘記修改方法名提高下逼格以上就是的優點,當然,的優點遠遠不止以上幾點,使用,你可以更加優雅高效的編輯代碼。實戰完成了上述準備之后,就可以愉快的使用進行編碼了。接下來是使用簡化后的代碼。
Lombok介紹
近來偶遇一款擼碼神器,介紹給大家~
相信許多小伙伴都深有體會,POJO類中的千篇一律的getter/setter,constructor等方法讓人寫的揪心,那么今天就有一種方法可以殘暴的解決這個問題。
接下來為大家介紹這款神器:Lombok
以下是官方對Lombok的介紹
Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.
Project Lombok是一個java庫,它可以自動插入編輯器和構建工具,為java增色。永遠不要再編寫另一個getter或equals方法,使用一個注釋,您的類就有了一個功能齊全的構建器、自動記錄變量等等。
簡而言之,Lombok實現的效果就是通過簡單的注解來精簡代碼達到消除冗長代碼的目的。
Lombok優點及缺點對Lombok有了一個基本的認識之后,讓我們來挖掘一下它的優缺點。首先看一下它的優點。
提高編碼效率
使代碼更簡潔
消除冗長代碼
避免修改字段名字時忘記修改方法名
提高下逼格
以上就是Lombok的優點,當然,Lombok的優點遠遠不止以上幾點,使用Lombok,你可以更加優雅高效的編輯代碼。但,俗話說“有利必有弊”,Lombok為我們帶來便利的同時也帶來的不少小麻煩。
Lombok需要額外的環境配置(接下來為講到)
傳染性(一旦在resource包里用了lombok,別人想看源碼也不得不裝插件)
降低代碼可讀性
雖然Lombok有著不少缺點,但總歸是利大于弊,作為一款優秀的神器,仍然值得我們去學習。
Lombok原理授人以魚不如授人以漁,接下來簡要介紹一下Lombok的原理。
Sun公司在2005.2.1提交了JSR 269,用于支持在編譯期對annotation進行處理,即引入了插入式注解處理API(Pluggable Annotation Processing API)。javac從java6開始支持“JSR 269 API”規范,只要程序實現了該API,就能在javac運行的時候得到調用,而Lombok實現了“JSR 269 API”,在編譯時,javac編譯源碼的具體流程如下:Source File -> Parse -> AST -> Annotation Processing -> Modified AST -> Analyze and Generate -> Byte CodeLombok引入項目 引入Lombok jar包
在項目中引入Lombok的方法有很多,在此以Maven為例進行講解,其他途徑可以參考官方網站https://projectlombok.org/。
打開pom.xml文件,添加以下依賴。
IDEA/Eclipse安裝Lombok插件org.projectlombok lombok 1.16.18 provided
在上面提到,Lombok需要額外的環境配置,此處以IDEA為例進行講解。
第一步,打開File -> Settings -> Plugins,輸入Lombok Plugin點擊搜索。
第二步,重啟IDE使插件生效。
Lombok實戰Coding完成了上述準備之后,就可以愉快的使用Lombok進行編碼了。編碼之前首先為大家介紹一下Lombok的基本用法。
@Data
包含了 @Getter @Setter @ToString @EqualsAndHashCode
即自動為類生成所有getter、setter、toString、eaquals以及hashCode方法@Getter 為所有屬性生成public修飾的get方法
@Getter(AccessLevel.PROTECTED) 為所有屬性生成protected修飾的get方法@Setter 為所有屬性生成public修飾的set方法
@Setter(AccessLevel.PROTECTED) 為所有屬性生成protected修飾的set方法@NoArgsConstructor 無參構造器
@AllArgsConstructor 生成帶有所有屬性的有參構造器@ToString 默認生成帶有所有屬性的toString方法
@ToString(exclude = "column") 生成除column屬性之外的所有屬性的toString方法
@ToString(exclude = {"column1", "column2"})
@ToString(of = "column") 生成只有column屬性的toString方法
@ToString(of = {"column1", "column2"})@EqualsAndHashCode
@EqualsAndHashCode(exclude = "column") 以column屬性之外的屬性作為是否是相同對象判斷的標準
@EqualsAndHashCode(of = "column")) 只以column屬性作為是否是相同對象判斷的標準@Slf4j 為當前類生成日志對象
@Log4j 為當前類生成日志對象
接下來讓我們簡單對比一下代碼。
首先是未經簡化的代碼。
public class User { private Integer id; private String username; private String password; private String email; private String phone; public User(Integer id, String username, String password, String email, String phone) { this.id = id; this.username = username; this.password = password; this.email = email; this.phone = phone; } public User() { } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; User user = (User) o; return Objects.equals(id, user.id) && Objects.equals(username, user.username) && Objects.equals(password, user.password) && Objects.equals(email, user.email) && Objects.equals(phone, user.phone); } @Override public int hashCode() { return Objects.hash(id, username, password, email, phone, question, answer, role, createTime, updateTime); } }
接下來是使用Lombok簡化后的代碼。
@Getter @Setter @NoArgsConstructor @AllArgsConstructor public class User { private Integer id; private String username; private String password; private String email; private String phone; }
Lombok的更多用法,在此不再贅述,等待大家去慢慢發掘。
Lombok工作中需要注意的點Lombok雖然好用,但推薦大家選擇適合的地方使用Lombok,例如POJO是一個好地方,因為POJO很單純。
彩蛋 反編譯大法如果有小伙伴想要深究Lombok是如何實現插入式注解的,可以利用反編譯大法查看源碼。
在此推薦另一款神兵利器 Java Decompiler。
官方網站為:http://java-decompiler.github.io/
有以下三種安裝方式:
JD-GUI 圖形化客戶端
JD-Eclipse eclipse插件
JD-IntelliJ idea插件
安裝完成后可以通過Java Decompiler驗證Class文件。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73660.html
摘要:還提供了全部參數的構造函數的自動生成,該注解的作用域也是只有在實體類上,因為只有實體類才會存在構造函數。當然除了全部參數的構造函數,還提供了沒有參數的構造函數,使用方式與一致。 Lombok對于Java偷懶開發者來說應該是比較中意的,恰恰筆者就是一個喜歡在小細節上偷懶來提高開發效率的人。所以在技術框架的海洋里尋找了很久才在GitHub開源平臺上找到,而在這之前國外很多程序猿一直使用該框...
摘要:概述通過提供簡單的語法注解形式來幫助簡化消除一些必須有但顯得很臃腫的代碼。作用在方法參數上的注解,用于自動生成空值參數檢查自動幫我們調用方法。 showImg(https://segmentfault.com/img/remote/1460000014247343); 概述 Lombok 通過提供簡單的語法注解形式來幫助簡化消除一些必須有但顯得很臃腫的 java 代碼。典型的是對于 ...
摘要:可以去下載包目前最新版本為。對于某個具體的類來說,出于安全或者性能或者其它方面的考慮,可能并不希望全部成員都出現在方法的返回值里。根據中的建議,方法和方法要同時實現,并且保證一致性。 前言 Lombok主頁 Lombok下載 Lombok引入項目之后,便可以使用 本文記錄了在項目中應用Lombok時的使用案例,希望對朋友你有一些幫助。 可以去 下載jar包 maven: ...
摘要:為了貼合主題,本次主要針對全局異常處理進行舉例說明。自定義異常處理自定義一個異常自定義異常程序員小明錯誤碼錯誤信息顯而易見,這個異常繼承了,屬于運行時異常。包括處理其他異常,都是這種方式。 之前用springboot的時候,只知道捕獲異常使用try{}catch,一個接口一個try{}catch,這也是大多數開發人員異常處理的常用方式,雖然屢試不爽,但會造成一個問題,就是一個Contr...
閱讀 1598·2021-11-04 16:11
閱讀 3309·2021-09-09 11:33
閱讀 1558·2019-08-30 15:54
閱讀 619·2019-08-30 15:44
閱讀 3173·2019-08-30 15:43
閱讀 2554·2019-08-30 13:06
閱讀 1698·2019-08-29 17:00
閱讀 895·2019-08-29 15:33