В моём проекте используется связка AspectJ + Spring. Для всех методов, отмеченных аннотацией `@MyAnn` необходимо определить класс и метод (так же отмеченный аннотацией `@MyAnn`) который вызывает текущий метод.
Пример. Есть 2 класса: A, B. Все методы класов A, B отмеченны аннотацией `@MyAnn`. Метод 'firstMethod(int)' класса A вызывает метод `action()` класса B. В данном случае небходимо определить какой метод (отмеченный аннотацией `@MyAnn`) в каком классе вызывает метод `action()` класса B. Причём недостаточно знать имя метода, необходимо получить обьект класса java.lang.reflect.Method.
pubic class A {
public static void main(String[] args) {
A aClass = new A();
aClass.firstMethod(5);
}
@MyAnn
public void firstMethod() {
System.out.println("A.firstMethod()");
B.action();
}
@MyAnn
public void firstMethod(int number) {
System.out.println("A.firstMethod(" + number + ")");
B.action();
}
}
pubic class B {
@MyAnn
public static void action() {
System.out.println("B.action()");
}
}
Аспект:
@Aspect
class MyAspect {
@Pointcut("@annotation(my.pkg.MyAnn)")
void annotationPointCutDefinition(){}
@Pointcut("execution(* *(..))")
void atExecution(){}
@Around("annotationPointCutDefinition() && atExecution()")
Object process(ProceedingJoinPoint joinPoint) {
// ...
}
}