1. 程式人生 > 其它 >lombok 之原理

lombok 之原理

參考:https://blog.csdn.net/jeasonlzy/article/details/74273851

以下沒有講解原理,而是自定義模擬 lombok :

自定義註解:

/**
 * @author Alay
 * @date 2020-03-09 22:55
 */
@Target({ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.SOURCE)
public @interface MyData {
 
}

自定義註解處理器:

/**
 * @author Alay
 * @date 2020-03-09 22:56
 */
@SupportedAnnotationTypes(value = {"com.behelpful.xxx.xxx.mylombok.annotation.MyData"}) @SupportedSourceVersion(value = SourceVersion.RELEASE_8) public class MyDataProcessor extends AbstractProcessor { @Override public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
// 獲取加入 MyData 註解的欄位或者類 Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(MyData.class); for (Element element : elements) { // 進行響應的邏輯處理 } return true; } }

對應註解的處理器需要繼承AbstractProcessor類,需要複寫以下4個方法:

1、init方法,會被註解處理工具呼叫

2、process方法,這相當於每個處理器的主函式main(),你在這裡寫你的掃描、評估和處理註解的程式碼,以及生成Java檔案。

3、getSupportedSourceVersion方法,指定使用的Java版本,通常這裡返回SourceVersion.latestSupported(),預設返回當前JDK支援的最後一個釋出版本

4、getSupportedAnnotationTypes方法,這裡必須指定,這個註解處理器是註冊給哪個註解的。注意,它的返回值是一個字串的集合,包含本處理器想要處理的註解型別的合法全稱,即註解器所支援的註解型別集合,如果沒有這樣的型別,則返回一個空集合

將自定義註解處理器新增到 jsr 269 規範中

src\main\resources\META-INF\services\javax.annotation.processing.Processor

檔案

javax.annotation.processing.Processor

內容:處理器類路徑

com.behelpful.xxx.xxx.mylombok.processor.MyDataProcessor

Maven 中加入編譯外掛:

<build>
   <plugins>
      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-compiler-plugin</artifactId>
         <version>3.8.0</version>
         <configuration>
            <compilerArgument>
               -proc:none
            </compilerArgument>
            <source>1.8</source>
            <target>1.8</target>
         </configuration>
      </plugin>
   </plugins>
</build>

...

本文來自部落格園,作者:Vermeer,轉載請註明原文連結:https://www.cnblogs.com/Alay/p/15623751.html