Java-idea-經常使用插件-lombok

一、插件安裝

打開perferences或者settings,找打plugins,選擇Browse repositories...,搜索lombok,下載安裝重啓便可。java

二、支持的註解:

2.一、@Getter and @Setter:api

  能夠做用在類上和屬性上;放在類上,會對全部的非靜態(non-static)屬性生成Getter/Setter方法;放在屬性上,會對該屬性生成Getter/Setter方法。默認生成的方法是public的,若是要修改方法修飾符能夠設置AccessLevel的值,例如:@Getter(access = AccessLevel.PROTECTED)ide

2.二、@FieldNameConstants
2.三、@ToStringui

  生成toString()方法,默認狀況下,它會按順序(以逗號分隔)打印你的類名稱以及每一個字段。能夠這樣設置不包含哪些字段 @ToString(exclude = "id") / @ToString(exclude = {"id","name"});若是繼承的有父類的話,能夠設置 callSuper 讓其調用父類的toString()方法,例如: @ToString(callSuper = true)

2.四、@EqualsAndHashCodespa

  默認狀況下,會使用全部非瞬態(non-transient)和非靜態(non-static)字段來生成equals和hascode方法,能夠經過在可選的exclude參數中來排除更多字段。或者,經過在parameter參數中命名它們來準確指定但願使用哪些字段。
2.五、@AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor插件

  無參構造器、部分參數構造器、全參構造器,當咱們須要重載多個構造器的時候,Lombok就無能爲力了。日誌

  @NoArgsConstructor生成一個無參構造方法。當類中有final字段沒有被初始化時,編譯器會報錯,此時可用@NoArgsConstructor(force = true),而後就會爲沒有初始化的final字段設置默認值 0 / false / null。對於具備約束的字段(例如@NonNull字段),不會生成檢查或分配,所以請注意,正確初始化這些字段以前,這些約束無效。
  @RequiredArgsConstructor會生成構造方法(可能帶參數也可能不帶參數),若是帶參數,這參數只能是以final修飾的未經初始化的字段,或者是以@NonNull註解的未經初始化的字段
  @RequiredArgsConstructor(staticName = "of")會生成一個of()的靜態方法,並把構造方法設置爲私有的
  @AllArgsConstructor 生成一個全參數的構造方法

2.六、@Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Floggercode

  註解在類上;爲類提供一個 屬性名爲log 的 log4j 日誌對象
2.七、@Data【經常使用】對象

  @ToString, @EqualsAndHashCode, 全部屬性的@Getter, 全部non-final屬性的@Setter和@RequiredArgsConstructor的組合,
一般狀況下,咱們使用這個註解就足夠了。blog

2.八、其餘

@Builder:爲你的類生成複雜的構建器API。
@Singular
@Delegate:至關的牛逼,它會該類生成一些列的方法,這些方法都來自與List接口
@Value
@Accessors

  主要用於控制生成的getter和setter
  主要參數介紹

  • fluent boolean值,默認爲false。此字段主要爲控制生成的getter和setter方法前面是否帶get/set
  • chain boolean值,默認false。若是設置爲true,setter返回的是此對象,方便鏈式調用方法
  • prefix 設置前綴 例如:@Accessors(prefix = "abc") private String abcAge 當生成get/set方法時,會把此前綴去掉

@Wither:提供了給final字段賦值的一種方法

@Cleanup:關閉流 
@Synchronized:給方法加上同步鎖,對象同步 
@SneakyThrows:拋出異常
from Intellij 14.1 @val
from Intellij 15.0.2 @var
from Intellij 14.1 @var
from Intellij 2016.2 @UtilityClass
Lombok config system
Code inspections
Refactoring actions (lombok and delombok)

三、配置註解處理器

在perferences或Settings設置頁面,點擊【Build,Execution,Deployment】-->選擇Compiler-->選中Annotation Processors,而後在右側勾選Enable annotation processing便可。

注意。每一個項目都需設置此項,若是不配置此項lombok註解不會生效。

四、引用pom

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.18</version>
            <scope>provided</scope>
        </dependency>

五、程序使用

主要使用步驟2中註解

六、原理

1.運行時解析
運行時可以解析的註解,必須將@Retention設置爲RUNTIME,這樣能夠經過反射拿到該註解。java.lang.reflect反射包中提供了一個接口AnnotatedElement,
該接口定義了獲取註解信息的幾個方法,Class、Constructor、Field、Method、Package等都實現了該接口,大部分開發者應該都很熟悉這種解析方式。

  View Code

2.編譯時解析

2.一、Annotation Processing Tool
  apt自JDK5產生,JDK7已標記爲過時,不推薦使用,JDK8中已完全刪除,自JDK6開始,可使用Pluggable Annotation Processing API來替換它,
apt被替換主要有2點緣由:
api都在com.sun.mirror非標準包下
沒有集成到javac中,須要額外運行
  apt的更多介紹能夠參見這裏。
2.二、Pluggable Annotation Processing API
  JSR 269,自JDK6加入,做爲apt的替代方案,它解決了apt的兩個問題,javac在執行的時候會調用實現了該API的程序,這樣咱們就能夠對編譯器作一些加強,
這時javac執行的過程以下: 這裏寫圖片描述 

  Lombok就是使用這種方式實現的,有興趣的話能夠去看看其Lombok源碼,對應註解的實現都在HandleXXX中,
好比@Getter註解的實現是HandleGetter.handle()。
還有一些其它類庫使用這種方式實現,好比Google Auto、Dagger等等。

 缺點:沒法支持多種參數構造器的重載

相關文章
相關標籤/搜索