Как использовать API обработки аннотаций во время выполнения?

Я следил за несколькими руководствами по инструменту обработки аннотаций (APT) (например, 1и 2) в Интернете, и мне удалось заставить его работать в компиляторе/ время сборки и даже заработало в Eclipse.

Есть ли способ использовать APT во время выполнения, чтобы получить список типов (классов) с помощью моей аннотации.

Я написал что-то вроде:

@SupportedAnnotationTypes("com.domain.MyAnnotation")
public class MyAbstractProcessor extends AbstractProcessor {

    public static Map patches = new HashMap();

    @Override
    public boolean process(final Set annotations, final RoundEnvironment roundEnvironment) {

        // Get all classes that has the annotation
        Set classElements = roundEnvironment.getElementsAnnotatedWith(MyAnnotation.class);

        // For each class that has the annotation
        for (final Element classElement : classElements) {

            patches.put(classElement, annotation);

Таким образом, MyAbstractProcessor.patches будет заполнен списком классов, использующих аннотацию. Благородная идея, за исключением того недостатка, что этот APT выполняется во время сборки, а не во время выполнения.

Возможно ли вообще использовать APT во время выполнения?

Или я использую не те фреймворки, чтобы получить то, что хочу?

5
задан corgrath 20 April 2012 в 06:47
поделиться