spring aop 拦截器顺序

spring aop 拦截器顺序

ID:11317985

大小:34.00 KB

页数:4页

时间:2018-07-11

spring aop 拦截器顺序_第1页
spring aop 拦截器顺序_第2页
spring aop 拦截器顺序_第3页
spring aop 拦截器顺序_第4页
资源描述:

《spring aop 拦截器顺序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、SpringAOP拦截在Spring的AOP中,如果一个Proxy同时实现MethodBeforeAdvice、AfterReturningAdvice和MethodInterceptor接口,那么这三个Advice的执行顺序是什么样的呢?经过试验,是和xml文件中的定义顺序有关的。如果Proxy的接口实现定义为                           MethodBeforeAdvice           AfterReturningAdvice           MethodInterc

2、eptor                那么执行的结果是MethodBeforeAdviceMethodInterceptor:beforecallReallymethodexcutingMethodInterceptor:aftercallAfterReturningAdvice也就是说,执行顺序是:MethodBeforeAdvice,MethodInterceptor的调用前的部分,目标方法,MethodInterceptor的调用后的部分,AfterReturningAdvice。如果proxy的

3、定义是                           MethodBeforeAdvice           MethodInterceptor           AfterReturningAdvice                执行的结果是MethodBeforeAdviceMethodInterceptor:beforecallReallymethodexcutingAfterReturningAdviceMethodInterceptor:aftercall也就是说,执行的顺序是:Me

4、thodBeforeAdvice,MethodInterceptor的调用前的部分,目标方法,AfterReturningAdvice,MethodInterceptor的调用后的部分。如果proxy的定义是                           MethodInterceptor           MethodBeforeAdvice           AfterReturningAdvice                执行的结果是:MethodInterceptor:beforec

5、allMethodBeforeAdviceReallymethodexcutingAfterReturningAdviceMethodInterceptor:aftercall也就是说,执行的顺序是:MethodInterceptor的调用前的部分,MethodBeforeAdvice,目标方法,AfterReturningAdvice,MethodInterceptor的调用后的部分。以上的顺序是在springframework1.2.5中测试的。=============================

6、===================================本人总结:MethodBeforeAdviceAfterReturningAdviceMethodInterceptor目标方法之前的拦截的优先级表现:优先级越高,越先拦截目标方法之后的拦截的优先级表现:优先级越高,越后拦截在xml文件中,ProxyFactoryBean.interceptorNames配置顺序决定advice的执行顺序又: 如果有多个通知想要在同一连接点运行会发生什么?SpringAOP遵循跟AspectJ一样的优先规

7、则来确定通知执行的顺序。在“进入”连接点的情况下,最高优先级的通知会先执行(所以给定的两个前置通知中,优先级高的那个会先执行)。在“退出”连接点的情况下,最高优先级的通知会最后执行。(所以给定的两个后置通知中,优先级高的那个会第二个执行)。 当定义在不同的切面里的两个通知都需要在一个相同的连接点中运行,那么除非你指定,否则执行的顺序是未知的。你可以通过指定优先级来控制执行顺序。在标准的Spring方法中可以在切面类中实现org.springframework.core.Ordered接口或者用Order注解

8、做到这一点。在两个切面中,Ordered.getValue()方法返回值(或者注解值)较低的那个有更高的优先级。 当定义在相同的切面里的两个通知都需要在一个相同的连接点中运行,执行的顺序是未知的(因为这里没有方法通过反射javac编译的类来获取声明顺序)。考虑在每个切面类中按连接点压缩这些通知方法到一个通知方法,或者重构通知的片段到各自的切面类中-它能在切面级别进行排序。参考:《spring揭秘》

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。