获取切入点方法的参数
JoinPoint:适用于前置、后置、返回后、抛出异常后通知
ProceedJointPoint:适用于环绕通知
获取切入点方法返回值
返回后通知
环绕通知
获取切入点方法运行异常信息
抛出异常后通知
环绕通知
一、AOP通知获取参数数据
JoinPoint对象描述连接点方法的运行状态,可以获取到原始方法的调用参数
//JoinPoint:用于描述切入点的对象,必须配置成通知方法中的第一个参数,可用于获取原始方法调用的参数 @Before("pt()") public void before(JoinPoint jp) { Object[] args = jp.getArgs(); System.out.println(Arrays.toString(args)); } @After("pt2()") public void after(JoinPoint jp) { Object[] args = jp.getArgs(); System.out.println(Arrays.toString(args)); System.out.println("after advice ..."); }
ProceedJoinPoint是JoinPoint的子类
//ProceedingJoinPoint:专用于环绕通知,是JoinPoint子类,可以实现对原始方法的调用 @Around("pt()") public Object around(ProceedingJoinPoint pjp) throws Throwable{ Object[] args = pjp.getArgs(); System.out.println(Arrays.toString(args)); Object ret = pjp.proceed(args); return ret; }
二、AOP通知获取返回值数据
抛出异常后通知可以获取切入点方法中出现的异常信息,使用形参可以接收对应的异常对象
//设置返回后通知获取原始方法的返回值,要求returning属性值必须与方法形参名相同 @AfterReturning(value = "pt()",returning = "ret") public void afterReturning(JoinPoint jp,String ret) { System.out.println("afterReturning advice ..."+ret); }
环绕通知中可以手工书写对原始方法的调用,得到的结果即为原始方法的返回值
@Around("pt()") public Object around(ProceedingJoinPoint pjp) { Object ret = pjp.proceed(); return ret; }
三、AOP通知获取异常数据(了解)
抛出异常后通知可以获取切入点方法中出现的异常信息,使用形参可以接收对应的异常对象
//设置抛出异常后通知获取原始方法运行时抛出的异常对象,要求throwing属性值必须与方法形参名相同 @AfterThrowing(value = "pt()",throwing = "t") public void afterThrowing(Throwable t) { System.out.println("afterThrowing advice ..."+t); }
抛出异常后通知可以获取切入点方法运行的异常信息,使用形参可以接收运行时抛出的异常对象
@Around("pt()") public Object around(ProceedingJoinPoint pjp) { Object ret = null; try { ret = pjp.proceed(); } catch (Throwable t) { t.printStackTrace(); } return ret; }