以我所知:用注解order可以用来控制aop的执行顺序。则是按照1>2>3这个顺序执行。
但是我这个例子却很奇怪,并不是按照这个顺序执行。
order1这个类,有2个around方式的拦截,一个是拦截注解
,一个是拦截方法
order2这个类,和order1中的拦截方法
,是同一个拦截方式
我理想中的执行顺序,应该是:order1拦截注解
> order1拦截方法
> order2拦截方法
但是实际的执行顺序,却是:order1拦截注解
> order2拦截方法
> order1拦截方法
于是我发现,无论如何设置order,必然都一定是拦截注解
会先执行。
所以这个现象究竟应该如何解释?难道是那个什么先执行的后返回?但是我这里没用到before和after啊
Spring的AOP执行顺序的参考文档如下:
http://docs.spring.io/spring/...
简单的说,@Aspect注解的Order是起效的,但同一个Aspect中的Advice是没有明确的执行顺序的,例如你Order(1)中的两个Advice.我们看以参考ReflectiveAspectJAdvisorFactory类的源码如下:
我们可以看到,其实Spring也就是按照方法名的对同级别Advice进行排序的.所以,如果想让同级别advice顺序执行,最好的办法就是,方法名按英文字母排列.我的测试代码如下:
执行结果:
----Order1:checkAuthPackage:Execution----
----Order1:checkAuth:Annotation----
但是楼主说的实际执行顺序应该还是不对的,肯定是Order(1)的先执行.