在上篇文章的實戰(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
總結
關于如何去實現(xiàn)鹃锈,本文就不多敘述了,因為參考文檔就很詳細瞧预,這里想記錄一些注意點:
- 一定要分開模塊或者項目來做屎债,而不是在同一個項目做。否則很容易有奇奇怪怪的問題
- dynamo-helper 項目 mvn clean install 之后垢油,其它項目就可以引用了盆驹,尤其在IDEA里面刷新Maven import.
- 有時候Maven跑沒問題,但是跑測試用例有問題滩愁,試試mvn clean compile再來躯喇。因為有些遺留代碼
-
IDEA里面Enable Annotation Processor,