pjp.proceed();
时间: 2024-04-29 21:20:17 浏览: 104
pjp.proceed()是AOP框架中的核心方法,它用于调用被代理对象的原始方法。在AOP中,我们可以使用它来控制方法的执行流程,比如在方法执行前后插入一些逻辑。
在切面类中,我们可以将pjp(ProceedingJoinPoint)对象作为方法参数来获取被代理方法的相关信息,包括方法名、参数、返回值等。在调用pjp.proceed()方法时,AOP框架会将控制权交给被代理对象的原始方法,等待方法执行完成后再继续执行切面类中的后置通知、异常通知和最终通知等方法。
需要注意的是,pjp.proceed()方法可能会抛出异常,因此我们需要在try-catch语句块中调用它,并在catch语句块中处理异常。同时,我们还需要在finally语句块中编写最终通知的逻辑,以确保无论方法是否抛出异常,都能够执行最终通知。
相关问题
LocalDateTime start = LocalDateTime.now(); object = pjp.proceed(); LocalDateTime end = LocalDateTime.now(); stringBuilder.append("方法开始时间:" + start + "ms"); stringBuilder.append("方法结束时间:" + end + "ms"); stringBuilder.append("运行耗时:" + (end - start) + "ms");
这段代码是什么意思呢?
这段代码是一个使用AOP编程的方法拦截器,在方法执行前记录方法开始时间,在方法执行后记录方法结束时间,然后计算方法运行的耗时,并将这些信息记录到一个StringBuilder对象中。其中,LocalDateTime是Java 8中新增的日期和时间API,用于表示本地日期和时间。pjp.proceed()是执行被拦截的方法,并返回结果。拦截器可以用于实现日志记录、性能统计、安全控制等功能。
@Around("pointCutIAntiResubmit(iAntiResubmit)") public Object aroundAdvice(ProceedingJoinPoint pjp, IAntiResubmit iAntiResubmit) { String key = loadKey(iAntiResubmit.key(), pjp); String redisKey = RedisConstants.ANTI_RESUBMIT_REDIS_KEY + RedisConstants.SEPARATOR + getValue(pjp, iAntiResubmit) + "::" + key; RLock lock = redissonClient.getLock(redisKey); try { Object[] args = pjp.getArgs();// 得到方法执行所需的参数 lock.lock(); return pjp.proceed(args);// 明确调用切入点方法(切入点方法) } catch (SysException se) { throw se; } catch (Throwable e) { throw new SysException(e.getMessage()); } finally { lock.unlock(); } }这里的iAntiResubmit.key()是不是为空
如果IAntiResubmit注解被正确地使用,并且在使用该注解时为key成员变量显式地赋值,那么iAntiResubmit.key()应该是非空的。
在上面的代码中,通过iAntiResubmit.key()获取IAntiResubmit注解的key成员变量的值,并将其作为loadKey方法的第一个参数。如果IAntiResubmit注解的key成员变量没有显式地赋值,那么iAntiResubmit.key()将返回空字符串,但是在loadKey方法中,空字符串会被视为无效的key值,可能会导致程序出错。
因此,在使用IAntiResubmit注解时,应该为其key成员变量显式地赋值,以确保程序能够正确地执行。
阅读全文