我有一个 Controller 方法,它用 2 个自定义注释进行注释。
其中一个是用 HandlerInterceptorAdapter
处理的,它是 Spring MVC 的一部分。
另一种是通过AOP@Aspect
来处理的。
看来第一个总是优先于最后一个。
放置 @Order(value = Ordered.HIGHEST_PRECEDENCE)
对于这种情况不起作用。
有什么办法可以安排这两者之间的执行顺序吗?
最佳答案
Spring 中有一个带有 @Order(value = Ordered.HIGHEST_PRECEDENCE + 1)
的拦截器 ExposeInitationInterceptor
,javadoc 说
If used, this interceptor will normally be the first in the interceptor chain.
因此,不可能有比这更高阶的拦截器。因此,如果您添加 +1
,即与 ExposeInitationInterceptor
相同的优先级(或更高),它将起作用。
所以,我尝试了以下操作并且它有效:
@Order(value = Ordered.HIGHEST_PRECEDENCE + 1)
@Order(value = Integer.MIN_VALUE + 1)
显然Ordered.HIGHEST_PRECEDENCE = Integer.MIN_VALUE
。
关于java - 如何订购AOP切面和MVC拦截器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57274322/