参考原文地址:
AOP切面补充:
一、@Before,@After,@Around,@AfterReturning,@AfterThrowing执行顺序:
@Around(ProceedingJoinPoint pjp) -》@Around(ProceedingJoinPoint pjp)-》pjp.proceed()开始执行真正的业务方法 -》@Before(JoinPoint joinPoint) -》@Around(ProceedingJoinPoint pjp)-》pjp.proceed()结束执行真正的业务方法 -》@After(JoinPoint joinPoint),不论该业务方法是否有异常 -》@AfterReturning/@AfterThrowing
二、如何获取@AfterReturning的返回值:
// 可以重载afterReturning方法,不加returning参数即可@AfterReturning(pointcut = "audit()", returning = "mv")public void doAfterReturning(ModelAndView mv) { system.out.println(mv.getModel().containsKey("actionErrors"));}
三、若加自定义注解中的一些方法没有返回值:
// 可以重载afterReturning方法,不加returning参数即可@AfterReturning(pointcut = "audit()")public void doAfterReturning(JoinPoint joinPoint) {}
需要注意此时,无返回值的业务方法只会走无返回值的此重载方法,而带返回值的业务方法则会先进带返回值的afterReturning,再走无返回值的afterReturning。