Intellij idea 不能識別 @Slf4j,@Getter ,@Setter註解,安裝Lombok

雲川之下 發表於 2020-11-22

以前的Java專案中,充斥著太多不友好的程式碼:POJO的getter/setter/toString;異常處理;I/O流的關閉操作等等,這些樣板程式碼既沒有技術含量,又影響著程式碼的美觀,Lombok應運而生。

1. Lombok的使用

Lombok的使用非常簡單:

1)引入相應的maven包

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

Lombok的scope=provided,說明它只在編譯階段生效,不需要打入包中。事實正是如此,Lombok在編譯期將帶Lombok註解的Java檔案正確編譯為完整的Class檔案。

2)新增IDE工具對Lombok的支援

IDEA中引入Lombok支援如下:

點選File-- Settings設定介面,安裝Lombok外掛
在這裡插入圖片描述
點選File-- Settings設定介面,開啟 AnnocationProcessors:在這裡插入圖片描述
開啟該項是為了讓Lombok註解在編譯階段起到作用。

2. Lombok實現原理

自從Java 6起,javac就支援“JSR 269 Pluggable Annotation Processing API”規範,只要程式實現了該API,就能在javac執行的時候得到呼叫。

Lombok就是一個實現了"JSR 269 API"的程式。在使用javac的過程中,它產生作用的具體流程如下:

1. javac對原始碼進行分析,生成一棵抽象語法樹(AST)

2. javac編譯過程中呼叫實現了JSR 269的Lombok程式

3. 此時Lombok就對第一步驟得到的AST進行處理,找到Lombok註解所在類對應的語法樹 (AST),然後修改該語法樹(AST),增加Lombok註解定義的相應樹節點

4. javac使用修改後的抽象語法樹(AST)生成位元組碼檔案





參考:
《Lombok的基本使用》