Изменить метод с помощью аннотаций

Как я могу изменить то, что делает метод в Java?

Я имею в виду, я пытаюсь использовать аннотации, чтобы сделать следующий код

@Anno1(Argument = "Option1")
public class TestClass
{       
    @Anno2
    public void test()
    {
    }

}

в

public class TestClass
{
    private static StaticReference z;

    public void test()
    {
           z.invokeToAll();
    }

}

Это очень упрощенный пример того, что я пытаюсь сделать. Anno1 будет иметь много возможных комбинаций, но пока это не моя проблема. Моя проблема в том, как добавить код к методу test ()

. Я ищу более общее решение, если возможно. Например. Способ добавления любого кода в метод (не только способ .invokeToAll () )

Пока я использую import javax.annotation.processing. *; и у меня есть следующий код, но я не знаю, как от него продолжить

private void processMethodAnnotations(RoundEnvironment env)
{
    for (Element e : env.getElementsAnnotatedWith(Anno2.class))
    {
        //If it is a valid annotation over a method
        if (e.getKind() == ElementKind.METHOD) 
        {
            //What to do here :S
        }else
        {
            processingEnv.getMessager().printMessage(Diagnostic.Kind.WARNING,"Not a method!", e);               
        }           
    }
}

Я нашел кое-что о Java Reflection, но я не нашел никакого источника, который помог бы мне в том, что я делаю.

Очевидно, что я расширяю AbstractProcessor в моем коде

Я нашел это руководство (http://www.zdnetasia.com/writing-and-processing-custom-annotations-part-3-39362483 .htm) Но это касается создания нового класса, а не просто изменения метода. и javax.lang.model.elements не предоставляют никакого способа редактирования этого элемента (который в моем случае представляет собой метод).

Надеюсь, мой вопрос ясен и соответствует правилам. Если нет, прокомментируйте, и я уточню. Спасибо.

12
задан 31 January 2011 в 13:48
поделиться