lombok 之原理
阿新 • • 發佈:2021-11-30
參考: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