Шаблон для обработки пользовательских аннотаций Java

В последнее время я прочитал много руководств по аннотациям Java, и мне нравится идея создания собственного. Большинство статей посвящено самой базовой идее и довольно простым реализациям. Однако мне не хватает правильного шаблона для обработки моей аннотации.

Допустим, у меня есть пользовательская аннотация @Foobar для инициализации полей. Мне нужно передать все классы, использующие эту аннотацию, моему процессору, назовем его FoobarProcessor:

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

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

Есть ли способ преодолеть этот недостаток? Есть ли какая-то единая точка, которую проходят все классы, где я могу легко применить свой процессор аннотаций?


person user1438038    schedule 30.01.2015    source источник


Ответы (3)


Распространенным шаблоном для обработки аннотаций или любых языковых элементов является шаблон посетителя.

Java даже включает в себя стандартный API для этого: .java" rel="nofollow noreferrer">SimpleElementVisitor7

Если вам нужен пример реализации процессора с использованием шаблона, взгляните на код PrintingProcessor. Процессор просматривает все элементы, которые он находит, и печатает некоторую информацию. Он используется для нестандартной опции Xprint javac (вы можете попробовать это в своей командной строке: javac -Xprint java.lang.Object).

person kapex    schedule 04.03.2015

Вам необходимо зарегистрировать процессор в файле META-INF. Этот ответ должен дать вам больше информации:

Каков процесс обнаружения процессоров аннотаций по умолчанию?

person Guy Bouallet    schedule 30.01.2015

Если вы хотите обработать свою аннотацию во время выполнения, вам необходимо сканировать классы из информации classLoader, этот ответ дает дополнительную информацию об этом: Как прочитать все классы из пакета Java в пути к классам?

person pdem    schedule 30.01.2015