Почему объекты JoinPoint или ProceedingJoinPoint могут вызывать метод? - PullRequest
0 голосов
/ 24 апреля 2020

AspectJ JoinPoint - это интерфейс, а ProceedingJoinPoint - это также интерфейс, расширяющий точку соединения.

Однако, когда я использую их в аспекте, я могу использовать их экземпляры и их методы напрямую.

@Around("execution(* com.luv2code.aopdemo.dao.service.*.getFortune(..))")
public Object aroundGetFortune(
        ProceedingJoinPoint proceedingJoinPoint) throws Throwable{

    String method = proceedingJoinPoint.getSignature().toShortString();
    System.out.println("\n=======> Executing @Around on method: " + method);

    return null;
}

Как это возможно? Разве интерфейс не должен быть реализован некоторыми классами, которые будут использоваться?

Или это то, что приведение происходит за кулисами в AspectJ?

Спасибо,

1 Ответ

1 голос
/ 24 апреля 2020

Во время выполнения среда Spring предоставляет экземпляр MethodInvocationProceedingJoinPoint , который является реализацией ProceedingJoinPoint .

Из исходного кода :

public class MethodInvocationProceedingJoinPoint implements ProceedingJoinPoint, JoinPoint.StaticPart {..}

Чтобы ответить на ваш вопрос, да, среда Spring имеет реализацию для интерфейса.

Вы можете отлаживать программу Spring AOP, чтобы наблюдать за тем, что происходит во время выполнения.

...