¿Cómo puedo cambiar lo que está haciendo un método en Java?Modificar un método usando Anotaciones
Es decir, yo estoy tratando de utilizar las anotaciones para hacer el siguiente código
@Anno1(Argument = "Option1")
public class TestClass
{
@Anno2
public void test()
{
}
}
En
public class TestClass
{
private static StaticReference z;
public void test()
{
z.invokeToAll();
}
}
Este es un ejemplo muy simplificado de lo que estoy tratando de hacer. Anno1
tendrá muchas combinaciones posibles, pero este no es mi problema hasta el momento. Mi problema es cómo agregar código al método test()
Estoy buscando una solución más genérica si es posible. P.ej. Una forma de añadir cualquier tipo de código en el método (no sólo una forma de .invokeToAll()
)
Hasta el momento estoy usando import javax.annotation.processing.*;
y tengo el siguiente código, pero no sé cómo continuar a partir de ahí
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);
}
}
}
He encontrado algo sobre Java Reflection pero no he encontrado ninguna fuente que me ayude con lo que estoy haciendo.
Obviamente extends AbstractProcessor
en mi código
He encontrado este tutorial (http://www.zdnetasia.com/writing-and-processing-custom-annotations-part-3-39362483.htm) Pero esto se refiere a crear una nueva clase, no solo a cambiar un método. y el javax.lang.model.elements
no proporciona ninguna forma de editar ese elemento (que en mi caso representa un Método).
Espero que mi pregunta sea clara y en línea con las reglas. Si no, por favor comenten y lo aclararé. Gracias.
Parece que la solución es lo que quiero, desafortunadamente debido a extrañas razones por las que no puedo usarla. He encontrado una solución en otro lugar ('Javassist'). De todos modos, ya te di +1 y ahora una Respuesta Aceptada por el esfuerzo y buena respuesta. ¡Muchas gracias! – Muggen
@Muggen hm, puedes contarme acerca de "razones raras", para poder ver si realmente importan; tal vez hay otra manera de seguir con AOP (parece más fácil de admitir ...) – Maxym
esas extrañas razones son 'Restricciones académicas';). Gracias por tu ayuda. – Muggen