【问题标题】:Pattern for processing custom Java annotations用于处理自定义 Java 注释的模式
【发布时间】:2015-03-30 00:20:37
【问题描述】:

我最近阅读了很多关于 Java 注释的教程,我喜欢创建自定义注释的想法。大多数文章都涵盖了非常基本的想法和相当简单的实现。不过,我缺少一个正确的模式来处理我的注释。

假设我有一个自定义注释@Foobar 来初始化字段。我需要将使用此注释的所有类传递给我的处理器,我们称之为FoobarProcessor

public class AnnotatedClass {
  @Foobar
  private String test = "";

  static {
    FoobarProcessor.process(AnnotatedClass.class);
  }
}

有什么方法可以克服这个缺点吗?是否有任何所有类都通过的单点,我可以轻松地应用我的注释处理器?

【问题讨论】:

    标签: java design-patterns annotations annotation-processing


    【解决方案1】:

    处理注释或任何语言元素的常见模式是visitor pattern

    Java 甚至为此包含一个标准 API:SimpleElementVisitor7

    如果您需要使用该模式的处理器示例实现,请查看PrintingProcessor 的代码。处理器遍历它找到的所有类型的元素并打印一些信息。它用于 javac 的非标准 Xprint 选项(您可以在命令行中尝试:javac -Xprint java.lang.Object)。

    【讨论】:

      【解决方案2】:

      您需要在 META-INF 文件中注册处理器。这个答案应该会给你更多信息:

      What is the default annotation processors discovery process?

      【讨论】:

        【解决方案3】:

        如果你想在运行时处理你的注释,你需要从类加载器的信息中扫描类,这个答案提供了更多关于它的信息: How do I read all classes from a Java package in the classpath?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-10-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多