Spring AOP 中的通知Advice

Spring提供了两种切面声明方式,实际工作中我们可以选用其中一种:
 1、基于XML配置方式声明切面。
 2、基于注解方式声明切面。
 只有纳入了Spring管理的切面拦截器才能够起到拦截作用,所以我们在定义了切面拦截器之后一定要在Spring的配置文件中声明这个bean,否则起不到拦截功能。
 注意:注解方式声明的切面,即使开启了组件自动扫描<context:component-scan />,也需要在Spring的配置文件中声明这个bean。

如果基于XML配置方式声明切面和基于注解方式声明切面的通知同时存在的话,①的通知会在基于注解方式声明切面②的通知前执行。
执行的顺序为:①的前置通知 --> ①的环绕通知(执行①中pjp.proceed()前面的代码) --> ②的通知(所有通知按顺序执行) --> ①的后置通知 --> ①的最终通知 --> (执行①中pjp.proceed()后面的代码)①的环绕通知结束

 

各个通知执行顺序:

1、程序正常运行没有抛出异常的情况下

前置通知 --> 环绕通知开始(执行pjp.proceed()前面的代码) -->  执行被拦截的函数 --> 后置通知 --> 最终通知 --> (执行pjp.proceed()后面的代码)环绕通知结束

2、程序抛出异常的情况下

前置通知 --> 环绕通知开始(执行pjp.proceed()前面的代码) -->  执行被拦截的函数(抛出异常) --> 例外通知 --> 最终通知

你可能感兴趣的:(spring aop)