AspectJ的JoinPoint是一个接口,ProceedingJoinPoint也是一个扩展Joinpoint的接口。
但是,当我在一个方面使用它们时,可以直接使用它们的实例和方法。
@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幕后进行了转换?
谢谢,
最佳答案
在运行时,Spring框架提供MethodInvocationProceedingJoinPoint的实例,该实例是ProceedingJoinPoint的实现。
从source code:
public class MethodInvocationProceedingJoinPoint implements ProceedingJoinPoint, JoinPoint.StaticPart {..}
要回答您的问题,是的,Spring框架具有接口的实现。
您可以调试Spring AOP程序以观察运行时发生的情况。