阅读来源:完美的AOP演示与讲解博客
各个处理时机执行示例参考:AOP处理时机代码示例
来源博客阅读概述:Spring中的AOP具体应用有权限校验、日志记录、统计等与系统业务代码关系不大的场景。AOP有两大部分:一是连接点joinPoint;二是切面Aspect。其中切面Aspect又包含了切点PointCut与通知处理Advice。通知处理Adivce包含处理时机(before、around、afterReturning、after、afterThrowing)与处理内容。

补充内容如下:
1、JoinPoint的参数注入获取:
由于AOP涉及到的相关组件已交由容器管理,JoinPoint连接点能在不同的时机中为方法参数所注入,并不仅限于Around。通过Signature可以获取到连接点的方法相关签名信息,如methodName。
2、各处理时机的执行顺序:
before--》method---》afterReturning --》after --》afterThrowing
以上的处理时机处理顺序并不冲突,且对于连接点是controller控制器其中的mapping映射方法,这些处理方法的返回值与MVC流程无关。
3、使用Around:
一旦使用了Around,那么其他的处理时机的处理内容是否执行取决于Around方法是否执行了切点方法,即
joinPoint.proceed();
,包括对异常的处理AfterThrowing。若确认执行,那么其他处理时机执行顺序相当于在嵌入Around方法中。另外,Around方法的返回值作为整个MVC流程的返回值。
4、关于连接点作为切点的两种方式
连接点是程序中可以作为切点的方法。@Pointcut获取定义切点有两种方式:
一、@Pointcut("execution(* com.example.controller..*.*(..))")通过方法地址路径表达式获取作为切点的连接点;
二、@Pointcut("@annotation(org.springframework.web.bind.annotation.GetMapping)")通过相关注释获取标注了该注释的切点的连接点。
注意@Pointcut标注与方法上,方法为无返回值、无参数的空方法。
5、过滤器、拦截器、解析器、AOP处理顺序
过滤器依赖servlet容器,在外部。拦截器依赖Spring容器,在中部。解析器在方法运行前解析所需解析参数,在中后部。AOP通过动态代理织入方法执行前后,最贴近方法执行。
故请求执行顺序Filter---》interceptor---》resolver---》AOP---》method,响应则倒过来。
当前版本:1.3

本文深入探讨了Spring中的AOP概念,包括连接点(JoinPoint)如何为方法参数注入,各处理时机(before、around、after、afterThrowing)的执行顺序,以及围绕通知(Around)的使用。详细阐述了如何通过方法路径表达式和注解定义切点,并解释了过滤器、拦截器、解析器与AOP在请求处理链中的位置。
1660





