官方介紹——Lombok項目是一個Java庫,它會自動插入您的編輯器和構建工具中,從而為您的Java增光添彩。永遠不要再寫另一個getter或equals方法,帶有一個注釋的您的類有一個功能全面的生成器,自動化您的日志記錄變量等等。理解一下,使用Lombok,通過注解類,讓你不再需要編寫getter、equals等方法,減少樣板代碼的編寫。
lombok的官方地址:https://projectlombok.org/
lombok的Github地址:https://github.com/rzwitserloot/lombok
Lombok的使用:
一、引入Lombok jar包
Lombok的scope=provided,說明它只在編譯階段生效,不需要打入包中。事實正是如此,Lombok在編譯期將帶Lombok注解的Java文件正確編譯為完整的Class文件。
二、開發工具中下載Lombok插件
ide下載插件后在開發階段ide可以識別Lombok注釋,從而不會報錯
安裝方法:點擊File-- Settings設置界面,安裝Lombok插件:
點擊File-- Settings設置界面,開啟 AnnocationProcessors:
開啟該項是為了讓Lombok注解在編譯階段起到作用。
三、Lombok的實現原理
自從Java 6起,javac就支持“JSR 269 Pluggable Annotation Processing API”規范,只要程序實現了該API,就能在javac運行的時候得到調用。Lombok就是一個實現了"JSR 269 API"的程序。
具體流程:
1. javac對源代碼進行分析,生成一棵抽象語法樹(AST)
2. javac編譯過程中調用實現了JSR 269的Lombok程序
3. 此時Lombok就對第一步驟得到的AST進行處理,找到Lombok注解所在類對應的語法樹 (AST),然后修改該語法樹(AST),增加Lombok注解定義的相應樹節點
4. javac使用修改后的抽象語法樹(AST)生成字節碼文件,生成對應類中的getter或者setter方法
四、Lombok注解的使用
Lombok主要常用的注解有:@Data,@getter,@setter,@NoArgsConstructor,@AllArgsConstructor,@ToString,@EqualsAndHashCode,@Slf4j,@Log4j等。
@Data注解:在JavaBean或類JavaBean中使用,這個注解包含范圍最廣,它包含getter、setter、NoArgsConstructor注解,即當使用當前注解時,會自動生成包含的所有方法;
@getter注解:在JavaBean或類JavaBean中使用,使用此注解會生成對應的getter方法;
@setter注解:在JavaBean或類JavaBean中使用,使用此注解會生成對應的setter方法;
@NoArgsConstructor注解:在JavaBean或類JavaBean中使用,使用此注解會生成對應的無參構造方法;
@AllArgsConstructor注解:在JavaBean或類JavaBean中使用,使用此注解會生成對應的有參構造方法;
@ToString注解:在JavaBean或類JavaBean中使用,使用此注解會自動重寫對應的toStirng方法;
@EqualsAndHashCode:作用於類,覆蓋默認的equals和hashCode
@NonNull:主要作用於成員變量和參數中,標識不能為空,否則拋出空指針異常。
@Builder:作用於類上,將類轉變為建造者模式
@Cleanup:自動關閉資源,針對實現了java.io.Closeable接口的對象有效,如:典型的IO流對象
@EqualsAndHashCode注解:在JavaBean或類JavaBean中使用,使用此注解會自動重寫對應的equals方法和hashCode方法;
@Slf4j:在需要打印日志的類中使用,當項目中使用了slf4j打印日志框架時使用該注解,會簡化日志的打印流程,只需調用info方法即可;
@Log4j:在需要打印日志的類中使用,當項目中使用了log4j打印日志框架時使用該注解,會簡化日志的打印流程,只需調用info方法即可;
在使用以上注解需要處理參數時,處理方法如下(以@ToString注解為例,其他注解同@ToString注解):
@ToString(exclude="column")
意義:排除column列所對應的元素,即在生成toString方法時不包含column參數;
@ToString(exclude={"column1","column2"})
意義:排除多個column列所對應的元素,其中間用英文狀態下的逗號進行分割,即在生成toString方法時不包含多個column參數;
@ToString(of="column")
意義:只生成包含column列所對應的元素的參數的toString方法,即在生成toString方法時只包含column參數;;
@ToString(of={"column1","column2"})
意義:只生成包含多個column列所對應的元素的參數的toString方法,其中間用英文狀態下的逗號進行分割,即在生成toString方法時只包含多個column參數;
參考鏈接:https://blog.csdn.net/qq_36314960/java/article/details/79565899