本文主要是介绍3.4 SpringAOP之通知获取数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.JoinPoint和ProceedingJoinPoint接口
接口 | 定义 | 功能 | 适用通知类型 |
---|---|---|---|
JoinPoint | 代表了在程序执行过程中的连接点 | 获取到连接点(被拦截方法)的名称、参数、目标对象以及代理对象等信息 | 前置、后置、返回后、抛出异常后通知 |
ProceedingJoinPoint | 是 JoinPoint 接口的子接口,除了继承了 JoinPoint 的所有功能外,还增加了一个非常关键的方法 proceed() | 通过 proceed() 方法,可以决定是否继续执行被拦截的方法以及如何执行 | 环绕通知 |
2.通知获取数据分类
分类 | 适用通知类型 |
---|---|
获取参数 | 前置、后置、环绕、返回后、抛出异常后通知 |
获取切入点方法返回值 | 环绕、返回后通知 |
获取切入点方法运行异常信息 | 环绕、抛出异常后通知 |
3.获取参数
(1)前置、后置、返回后、抛出异常后通知
@Before("切入点方法名()")public void advice(JoinPoint jp) {// 获取切入点方法参数Object[] args = jp.getArgs();}
(2)适用于环绕通知
@Around("切入点方法名()")public Object advice(ProceedingJoinPoint pjp) throws Throwable {// 获取切入点方法参数Object[] args = pjp.getArgs();}
4.获取返回值
(1)环绕通知
@Around("切入点方法名()")public Object aroundAdvice(ProceedingJoinPoint pjp) throws Throwable {// 对原始操作的调用,并接收其返回值Object proceed = pjp.proceed();return proceed;}
(2)返回后通知
注:如果返回后通知同时获取参数和返回值,通知的形参必须是JoinPoint形参在前,接收返回值的形参在后
@AfterReturning(value = "切入点方法名()" ,returning = "ret(通知方法中用来接收返回值的形参名)")public void afterReturning(Object ret) {System.out.println("返回后通知获取切入点方法返回值:" + ret);}
5.获取异常
(1)环绕通知
@Around("切入点方法名()")public Object aroundAdvice(ProceedingJoinPoint pjp) {Object proceed = null;try {proceed = pjp.proceed();} catch (Throwable e) {e.printStackTrace();}return proceed;}
(2)抛出异常后通知
@AfterThrowing(value = "切入点方法名()", throwing = "e(通知方法中用来接收异常的形参名)")public void afterThrowing(Throwable e){e.printStackTrace();}
这篇关于3.4 SpringAOP之通知获取数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!