簡介
注解處理器(Annotation Processor)是javac的一個工具漾橙,不管是運(yùn)行時注解還是編譯時注解边锁,都會通過處理器在編譯時進(jìn)行掃描和處理注解。
自定義處理器
1、在Androidstudio中創(chuàng)建一個Java Library Module(注解處理器需要javax包的支持,Android環(huán)境下是訪問不到j(luò)avax包的,同時注解處理器要被打包進(jìn)jar包里面才能被系統(tǒng)識別渺杉,這就是選用ava Library的原因,目前注解注解框架均是如此挪钓。)
2是越、定義一個注解
image.png
3、 繼承虛處理器AbstractProcessor
image.png
- init(ProcessingEnvironment processingEnvironment):
每一個注解處理器類都必須有一個空的構(gòu)造函數(shù)诵原。然而英妓,這里有一個特殊的init()方法挽放,它會被注解處理工具調(diào)用绍赛,并輸入ProcessingEnviroment參數(shù)蔓纠。ProcessingEnviroment提供很多有用的工具類Elements, Types和Filer。后面我們將看到詳細(xì)的內(nèi)容吗蚌。 - process(Set<? extends TypeElement> annotations, RoundEnvironment env):
這相當(dāng)于每個處理器的主函數(shù)main()腿倚。掃描、評估和處理注解的代碼蚯妇,以及生成Java文件敷燎。輸入?yún)?shù)RoundEnviroment,可以讓你查詢出包含特定注解的被注解元素箩言。后面我們將看到詳細(xì)的內(nèi)容硬贯。 - getSupportedAnnotationTypes():
這里你必須指定,這個注解處理器是注冊給哪個注解的陨收。注意饭豹,它的返回值是一個字符串的集合,包含本處理器想要處理的注解類型的合法全稱务漩。換句話說拄衰,你在這里定義你的注解處理器注冊到哪些注解上。 - getSupportedSourceVersion():
用來指定你使用的Java版本饵骨。通常這里返回SourceVersion.latestSupported()翘悉。然而,如果你有足夠的理由只支持Java 6的話居触,你也可以返回SourceVersion.RELEASE_6妖混。我推薦你使用前者。
image.png
上圖為在process方法中使用javapoet自動生成java類
4轮洋、注冊處理器
- 注冊方式一:手動注冊
在使用注解處理器需要先聲明制市,步驟:- 需要在 processors 庫的 main 目錄下新建 resources 資源文件夾;
-
在 resources文件夾下建立 META-INF/services 目錄文件
image.png
在文件java.lang.Process中增加注冊器路徑名:
com.lsm.processor.JsonProcessor
-
方式二:自動注冊
google提供了一個注冊處理器的庫AutoService砖瞧。幫助將要編譯的處理器進(jìn)行編譯息堂。
compile ‘com.google.auto.service:auto-service:1.0-rc4’
image.png
image.png
至此自定義注解處理器完成。
5块促、使用自定義注解處理器
將processor編譯出的jar包拷貝到項目中
image.png
image.png
在工程的build.gradle中增加使用的處理器:
image.png