Spring AOP 拦截
来源:互联网 发布:什么软件可以测手速 编辑:程序博客网 时间:2024/05/18 22:45
在Spring 的AOP中,如果一个Proxy同时实现MethodBeforeAdvice、AfterReturningAdvice和MethodInterceptor接口,那么这三个Advice的执行顺序是什么样的呢?
经过试验,是和xml文件中的定义顺序有关的。
如果Proxy的接口实现定义为
MethodBeforeAdvice
AfterReturningAdvice
MethodInterceptor
那么执行的结果是
MethodBeforeAdvice
MethodInterceptor: before call
Really method excuting
MethodInterceptor: after call
AfterReturningAdvice
也就是说,执行顺序是:MethodBeforeAdvice,MethodInterceptor的调用前的部分,目标方法,MethodInterceptor的调用后的部分,AfterReturningAdvice。
如果proxy的定义是
MethodBeforeAdvice
MethodInterceptor
AfterReturningAdvice
执行的结果是
MethodBeforeAdvice
MethodInterceptor: before call
Really method excuting
AfterReturningAdvice
MethodInterceptor: after call
也就是说,执行的顺序是:MethodBeforeAdvice,MethodInterceptor的调用前的部分,目标方法,AfterReturningAdvice,MethodInterceptor的调用后的部分。
如果proxy的定义是
MethodInterceptor
MethodBeforeAdvice
AfterReturningAdvice
执行的结果是:
MethodInterceptor: before call
MethodBeforeAdvice
Really method excuting
AfterReturningAdvice
MethodInterceptor: after call
也就是说,执行的顺序是:MethodInterceptor的调用前的部分,MethodBeforeAdvice,目标方法,AfterReturningAdvice,MethodInterceptor的调用后的部分。
以上的顺序是在springframework 1.2.5中测试的。
================================================================
本人总结:
MethodBeforeAdvice
AfterReturningAdvice
MethodInterceptor
目标方法之前的拦截的优先级表现:优先级越高,越先拦截
目标方法之后的拦截的优先级表现:优先级越高,越后拦截
在xml文件中,ProxyFactoryBean.interceptorNames配置顺序决定advice的执行顺序
又:
如 果有多个通知想要在同一连接点运行会发生什么?Spring AOP遵循跟AspectJ一样的优先规则来确定通知执行的顺序。 在“进入”连接点的情况下,最高优先级的通知会先执行(所以给定的两个前置通知中,优先级高的那个会先执行)。 在“退出”连接点的情况下,最高优先级的通知会最后执行。(所以给定的两个后置通知中, 优先级高的那个会第二个执行)。
当定义在不同 的切面里的两个通知都需要在一个相同的连接点中运行, 那么除非你指定,否则执行的顺序是未知的。你可以通过指定优先级来控制执行顺序。 在标准的Spring方法中可以在切面类中实现org.springframework.core.Ordered 接口或者用Order注解做到这一点。在两个切面中, Ordered.getValue()方法返回值(或者注解值)较低的那个有更高的优先级。
当 定义在相同的切面里的两个通知都需要在一个相同的连接点中运行, 执行的顺序是未知的(因为这里没有方法通过反射javac编译的类来获取声明顺序)。 考虑在每个切面类中按连接点压缩这些通知方法到一个通知方法,或者重构通知的片段到各自的切面类中 - 它能在切面级别进行排序。
参考:《spring 揭秘》
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* csdn 横长 */google_ad_slot = "7322168821";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
http://book.csdn.net/bookfiles/1140/100114034127.shtml
- Spring AOP(拦截)
- Spring AOP 拦截
- Spring AOP 拦截
- Spring aop拦截器
- spring aop拦截action
- spring aop 拦截例子
- 通过Spring AOP 拦截 SQL
- spring前置AOP拦截action
- spring AOP的异常拦截
- Spring AOP 异常拦截器
- spring 简单配置aop 拦截
- spring AOP的异常拦截
- Spring Aop 日志拦截器
- spring AOP的异常拦截
- spring aop拦截action配置
- spring AOP的异常拦截
- spring的aop拦截器
- spring AOP的异常拦截
- LPC23XX的PCONP与UART2和UART3
- Spring Data JPA初使用
- CreateRemoteThread简单应用
- 用nagios监控ORACLE服务器
- 一个很好的博客
- Spring AOP 拦截
- 灰盒测试概念,摘自百度
- 注册表学习——创建快捷方式时不显示“快捷方式”文字
- mybatis与spring整合(基于Annotation)
- Spring工作原理及其作用
- HDOJ P1015 Safecracker
- windows row socket
- 框架学习之Spring 第一节 认识Spring以及环境的配置
- 框架学习之Spring 第二节 采用Spring管理Bean和依赖注入