首页 > 解决方案 > Java Custom Annotation 的处理器代码什么时候调用?(运行时保留)

问题描述

我知道自定义 Java 注释需要一个半接口声明@interface和一个处理器代码(在某些文本中称为消费者代码),它定义了注释背后的实际业务逻辑。到目前为止很清楚,但我的问题是,处理器代码在何处/何时被调用以及由谁调用?我的意思是,Java 编译器是否生成调用所有注释处理器的代码,例如,在类加载时?还是程序员自己决定何时为他们的自定义注释调用他们的处理器代码?例如,@GetMapping("/users")在某些方法上,告诉 servlet API 将请求映射到其请求路径中的 /users,应该传递给该方法。所以它在幕后有一些应该被调用的处理器将此映射配置存储在某处,但是何时以及谁调用该处理器?我想我的问题只有在注释上才有意义@Retention(RetentionPolicy.RUNTIME)。谢谢

标签: javaannotationsprocessor

解决方案


注释处理器在编译时运行。调用javac时,用户传递-processor命令行选项,然后javac调用处理器。注释处理器可以发出错误、创建文件(包括 Java 代码文件),甚至修改现有代码。除了上面链接的 Oracle 文档之外,您可能还想查看教程,例如Baeldung 的.

有些框架直接解释注解,所以你不需要编写自己的注解处理器。

为了影响运行时行为,您的代码可以反射性地读取注释;在这种情况下,没有注释处理器在编译时运行。


推荐阅读