用于处理自定义Java注释的模式

时间:2015-01-30 13:51:20

标签: java design-patterns annotations annotation-processing

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

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

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

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

有没有办法克服这个缺点?所有类都通过了单点,我可以轻松应用我的注释处理器吗?

3 个答案:

答案 0 :(得分:1)

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

Java甚至包括一个标准的API:SimpleElementVisitor7

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

答案 1 :(得分:0)

您需要在META-INF文件中注册处理器。这个答案可以为您提供更多信息:

What is the default annotation processors discovery process?

答案 2 :(得分:0)

如果要在运行时处理注释,则需要从classLoader的信息中扫描类,此答案提供有关它的更多信息: How do I read all classes from a Java package in the classpath?