我最近阅读了很多关于Java注释的教程,我喜欢创建自定义注释的想法。大多数文章涵盖了非常基本的想法和相当简单的实现。但是,我错过了处理我的注释的正确模式。
假设我有一个自定义注释@Foobar
来初始化字段。我需要将使用此注释的所有类传递给我的处理器,让我们称之为FoobarProcessor
:
public class AnnotatedClass {
@Foobar
private String test = "";
static {
FoobarProcessor.process(AnnotatedClass.class);
}
}
有没有办法克服这个缺点?所有类都通过了单点,我可以轻松应用我的注释处理器吗?
答案 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?