在上篇文章的实战中,搞了GraalVM编译Java程序,有个需求是自动生成reflect-config.json, 并且生成DynamoBean 的Helper类。这是通过Annotation Processor做的。原来想像Lombok一样改变原类添加方法,但是发现Lombok用了ASM才做到这件事,因为Annotation Processor是不允许你生成一个跟原类名一样的类在同一包名之下。
那么你面临几个选择:
- 扩展Lombok,添加你的注解
- Annotation Processor生成新类
- 自己写一个改AST的东西 (需要花费的时间无法估计)
Lombok的扩展也是不难的,有兴趣的同学可以Google一下。而本人考虑到搞自己的lombok发行版比较容易有冲突,而且还要花精力维护(每个新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
总结
关于如何去实现,本文就不多叙述了,因为参考文档就很详细,这里想记录一些注意点:
- 一定要分开模块或者项目来做,而不是在同一个项目做。否则很容易有奇奇怪怪的问题
- 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
网友评论