Alexiuscrow
@Alexiuscrow

Как определить метод который вызывает текущий метод?

В моём проекте используется связка 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) {
        // ...
    }
}
  • Вопрос задан
  • 676 просмотров
Пригласить эксперта
Ответы на вопрос 1
@aol-nnov
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы