当前位置: 首页 > 知识库问答 >
问题:

在编译时使用注释处理器索引注释类是一种好的做法吗?

袁安志
2023-03-14

那么,这是一种好的做法吗?有什么缺点吗?如果它像我现在看起来的那么好,为什么没有很多库以一种简单的方式来做到这一点(我找到的唯一一个是类索引)?相反,对于运行时处理,有这么多?

共有1个答案

司毅庵
2023-03-14

作为ClassIndex库的作者,我可以列出使用注释处理进行注释索引的几个优点,但也列出了我认为阻碍其广泛采用的一个缺点。

优点:

  • 使用注释处理的索引是基于官方的JSR269的。另一方面,类路径扫描依赖于Java内部。众所周知,类加载器没有用于检索注释类列表的API。但更令人惊讶的是,泛型类加载器不允许列出它试图从其中加载类的文件夹和JAR文件。类路径扫描程序假定用于加载类的唯一类加载器是URLClassLoader,它允许检索源URL,以便使用getURL()方法进行扫描。
  • 在某些环境中,通常的类路径扫描程序不能工作,例如在Android上使用Dalvik可执行格式
  • 恒定的运行时复杂度使编译时索引超快。
  • Project Jigsaw计划将注释检测引入Java。当前的需求还建议编译时索引作为一种可行的实现。它甚至引入了@Indexed元注释,其目的与ClassIndex库中的@IndexAnnotated相同。
    null
 类似资料:
  • 我有以下Spring Boot类,用自定义注释注释: 注释定义如下: 我想要的是编写一个注释处理器,有效地使我的控制器像下面的代码一样工作。 我已经能够在运行时通过反射实现这一点,但这大大延长了启动时间。有没有办法只使用注释和自定义注释处理器来实现上述功能?换句话说,我想创建一个注释,将带注释的方法添加到类中,并将任意方法调用添加到现有方法中。 我知道注释处理并不真正支持修改源代码。我有兴趣知道任

  • 我正在使用注释处理器来处理方法参数的注释。 用于参数的注释类型有一个注释@参数 现在,当注释处理器运行时,我想检查参数注释()是否有参数注释。我通过执行以下代码来实现这一点。 由于某种原因,arg始终为空。是否有注释未返回的原因?

  • null 代码(步骤1和2): 实际上,第一个任务执行良好,并为注释处理器实现编译.class文件。它在第二个任务停止。 Ant说: Java 1.6 Ant 1.8.2

  • 我正在尝试创建一个自定义注释,例如,确保字段或方法既是又是,如果字段或方法既不是又不是,则会生成编译时错误,如以下示例所示: 到目前为止,我已经完成了两个自定义注释接口: 和: 正如所暗示的,我不知道如何生成编译时错误。Processor的文档清楚地表明我不应该抛出异常, 如果处理器抛出未捕获的异常,该工具可能会停止其他活动注释处理器。 它接着描述了当提出错误条件时会发生什么,现在是如何提出错误条

  • 问题内容: 我正在尝试创建一个自定义批注,例如,以确保字段或方法为and ,并且如果该字段或​​方法不为and ,则将生成编译时错误,如以下示例所示: 到目前为止,我已经完成了两个自定义注释接口: 和: 如所示,我不知道如何生成编译时错误。Processor 的文档清楚地表明,我不应该抛出异常, 如果处理器抛出未捕获的异常,则该工具可能会停止其他活动的注释处理器。 它继续描述了引发错误条件时会发生

  • 我正在编写一个注释处理器来在编译时执行以下检查: 有一个接口 有一个注释<code>Apply<code>用于注释方法 用注释的方法应被称为,并且只取实现 到目前为止,我已经识别了所有名为< code>apply的带注释的方法,并提取了它们作为参数的类名。所以我只剩下: 问题是:如果有的话,我如何才能从中获得参数的类层次结构表示,以便检查它是否实现了。无法使用<code>类加载器。loadClas