【发布时间】:2021-06-28 13:47:41
【问题描述】:
我知道 Custom Java Annotations 需要一个带有 @interface 的半接口声明和一个定义实际的 processor 代码(在某些文本中称为消费者代码)注释背后的业务逻辑。到目前为止很清楚,但我的问题是,处理器代码在何处/何时被调用以及由谁调用?我的意思是,Java 编译器是否生成调用所有注释处理器的代码,例如,在类加载时?还是程序员自己决定何时为他们的自定义注释调用他们的处理器代码?
例如,@GetMapping("/users") 在某个方法上,告诉 servlet API 将请求映射到其请求路径中的 /users,应该传递给该方法。所以它在后台有一些处理器,应该调用它在某处存储此映射配置,但是何时以及谁调用该处理器?我想我的问题只对@Retention(RetentionPolicy.RUNTIME) 的注释有意义。谢谢
【问题讨论】:
-
不需要为每个自定义注解配备注解处理器。例如,您可以简单地通过反射阅读它们。而且 servlet 不能单独运行。要运行 servlet,您需要一个框架的实现,该框架提供对 servlet 框架有意义的注释定义。所以应该清楚哪些软件处理这些注释。
-
@Holger 我并不是说我们必须为 servlet 注释等编写处理器,我知道 Spring Web 已经为注释编写了处理器。我的问题是那个处理器什么时候被调用?和谁?
-
也许我们必须先澄清一下,您对“处理器”这个名称的理解。
标签: java annotations processor