3.4 SpringAOP之通知获取数据

发布于:2024-06-21 ⋅ 阅读:(113) ⋅ 点赞:(0)

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();
    }

网站公告

今日签到

点亮在社区的每一天
去签到