在上篇文章的實戰(zhàn)中,搞了GraalVM編譯Java程序,有個需求是自動生成reflect-config.json, 并且生成DynamoBean 的Helper類。這是通過Annotation Processor做的。原來想像Lombok一樣改變原類添加方法,但是發(fā)現(xiàn)Lombok用了ASM才做到這件事,因為Annotation Processor是不允許你生成一個跟原類名一樣的類在同一包名之下。
那么你面臨幾個選擇:
- 擴展Lombok,添加你的注解
- Annotation Processor生成新類
- 自己寫一個改AST的東西 (需要花費的時間無法估計)
Lombok的擴展也是不難的,有興趣的同學可以Google一下。而本人考慮到搞自己的lombok發(fā)行版比較容易有沖突,而且還要花精力維護(每個新JVM版本出來,Lombok都會去更新,就算不出新JVM版本,也會有更新),還是打算用Annotation Processor。
參考了文章:
- Annotation Processor基本用例:https://www.baeldung.com/java-annotation-processing-builder
- Java-poet 用于生成代碼: https://www.baeldung.com/java-poet
最終做出了
- Annotation Processor: https://gitee.com/ShanGor/aws-lambda-java-dynamodb-native/tree/master/dynamo-helper
- 使用實例:https://gitee.com/ShanGor/aws-lambda-java-dynamodb-native/tree/master/sample
總結(jié)
關(guān)于如何去實現(xiàn),本文就不多敘述了,因為參考文檔就很詳細,這里想記錄一些注意點:
- 一定要分開模塊或者項目來做,而不是在同一個項目做。否則很容易有奇奇怪怪的問題
- dynamo-helper 項目 mvn clean install 之后,其它項目就可以引用了,尤其在IDEA里面刷新Maven import.
- 有時候Maven跑沒問題,但是跑測試用例有問題,試試mvn clean compile再來。因為有些遺留代碼
-
IDEA里面Enable Annotation Processor,Screen Shot 2022-02-02 at 7.56.05 PM.png
