gpt4 book ai didi

java - 创建自定义注释时 AnnotationProcessor 与 ConstraintValidator 有什么用

转载 作者:行者123 更新时间:2023-12-01 17:46:15 26 4
gpt4 key购买 nike

我需要创建一个自定义注释,当该注释应用于方法时,会根据各种检查检查并验证输入参数(原始和非原始)。如果检查失败应该直接返回错误消息。

在搜索时,我在创建自定义注释时遇到了 AbstractProcessor 和 ConstraintValidator 的使用。作为创建自定义注释的新手,我想了解如何继续实现我的问题陈述。

最佳答案

首先,您需要明白您正在谈论两件不同的事情。

TL;DR:编译时与运行时 - 你需要运行时

<小时/>

注释处理器是一个抽象术语,用于标识在编译时运行的进程,并且能够扫描源文件,即具有 .java 的源文件扩展名。

注释处理器实现可能会根据任意检查抛出警告,甚至错误以停止编译任务。
示例:“我注意到有人向我的方法传递了 null 值,这是一个错误!停止一切!”

实现注释处理器的起点是 AbstractProcessor 基类,或 Processor 接口(interface) ( documentation )。
ConstraintValidator 实现不同,您还需要通过处理器元数据文件显式注册它,该文件必须位于生成的 JAR 工件内的标准目录下。

META-INF/services/javax.annotation.processing.Processor

创建注释处理器所需的内容已包含在标准 JDK 中。您不需要外部依赖项。

<小时/>

另一方面, ConstraintValidator 标识与 Validation API 模块一起提供的接口(interface),位于包 javax.validation 下。此 API 有不同的实现,但最常用的是 Hibernate Validator ( documentation )。
该接口(interface)提供的验证是在运行时验证的。

与注释处理器不同,验证 API 实现必须手动提供,例如

<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.15.Final</version>
</dependency>
<小时/>

你写的

when applied over a method checks and validates the input parameters (Primitive and non-primitive) against various checks

看来您需要编写运行时检查,这意味着验证 API 才是正确的选择。

关于java - 创建自定义注释时 AnnotationProcessor 与 ConstraintValidator 有什么用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54969743/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com