RetentionPolicy.SOURCE
编译class文件消失
如:Lombok
原理是:
基于JSR 269的Java注解处理器,java编译器在编译源代码的过程中增加了annotation processing 过程,即在生成AST(抽象语法树)后,对AST做了修改生成对应的二进制字节码。
但是IDE中并不能识别加了Lombok注解的源码语法,如A类@getter在B类中调用,所以要安装一个Lombok plugin插件来识别。
https://juejin.im/post/5a6eceb8f265da3e467555fe#heading-5
RetentionPolicy.CLASS
编译class文件后存在,运行时消失
如:mapstruct
原理是:同上
和SOURCE 的区别是编译器处理完注解后,还存在在class文件中。
https://juejin.im/entry/5af543fd518825426a1fbd99
RetentionPolicy.RUNTIME
一直存在到运行时,可以运行时反射获取
如:springIOC注解使用
原理是:通过反射获取类型、属性或则方法上注解来做相应操作。