在常见的切面中,常用的参数有:JointPoint和ProceedingJoinPoint,其中ProceedingJoinPoint继承JointPoint,ProceedingJoinPoint用在@Arround注解的方法参数里,下面分开谈
1.JointPoint的常用方法
public void invoke(JoinPoint joinPoint) throws Throwable{
//拦截的实体类
Object target = joinPoint.getTarget();
//拦截的方法名称
String methodName = joinPoint.getSignature().getName();
//拦截的方法参数
Object[] argsa = joinPoint.getArgs();
//拦截的放参数类型
Class[] parameterTypes = ((MethodSignature)joinPoint.getSignature()).getMethod().getParameterTypes();
Method method = target.getClass().getMethod(methodName, parameterTypes);
Login login = method.getAnnotation(Login.class);
2. ProceedingJoinPoint的常用方法
用在环绕通知,也就是注解@Arround的方法参数里,ProceedingJoinPoin有一个proceed方法:
ProceedingJoinPoint继承JoinPoint子接口,它新增了两个用于执行连接点方法的方法:
java.lang.Object proceed() throws java.lang.Throwable:通过反射执行目标对象的连接点处的方法;
java.lang.Object proceed(java.lang.Object[] args) throws java.lang.Throwable:通过反射执行目标对象连接点处的方法,不过使用新的入参替换原来的入参。
说人话就是,让目标方法执行