Annotation Processor 实践

在上篇文章的实战中,搞了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

你可能感兴趣的:(Annotation Processor 实践)