欢迎来到天天文库
浏览记录
ID:11317985
大小:34.00 KB
页数:4页
时间:2018-07-11
《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揭秘》
此文档下载收益归作者所有