如何订购AOP方面和MVC拦截器?

时间:2019-07-30 14:42:43

标签: java spring aop

我有一个控制器方法,该方法带有2个自定义注释。

其中一个由HandlerInterceptorAdapter处理,这是Spring MVC的一部分。 另一个由AOP @Aspect处理。

似乎第一个总是优先于最后一个。

在这种情况下,放置@Order(value = Ordered.HIGHEST_PRECEDENCE)无效。

有什么办法可以在这两者之间安排执行顺序?

1 个答案:

答案 0 :(得分:1)

春季ExposeInvocationInterceptor中有一个@Order(value = Ordered.HIGHEST_PRECEDENCE + 1)的拦截器,并且javadoc说

  

如果使用,则此拦截器通常是拦截器链中的第一个。

因此,没有任何拦截器具有更高的顺序。因此,如果您添加+1,即与ExposeInvocationInterceptor(或更高)相同的优先级,它将起作用。

因此,我尝试了以下方法并起作用:

@Order(value = Ordered.HIGHEST_PRECEDENCE + 1)

@Order(value = Integer.MIN_VALUE + 1)

显然是Ordered.HIGHEST_PRECEDENCE = Integer.MIN_VALUE