java - 如何订购AOP切面和MVC拦截器?

标签 java spring aop

我有一个 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/

相关文章:

java - Spring:如何在输入@AfterReturning建议之前提交事务

java - Spring Aspectj @Before 所有休息方法

spring - 使用 Spring Data Rest 发布到集合关联

spring - 使用 EntityManager (JPA) 的 DAO 中 update () 方法的推荐行为?

java - 将 NoSuchBeanDefinitionException 存储库引入服务

java多线程用于任务之间的同步

java - 结合 hibernate.xml 和 spring-dispatcher.xml

java - AspectJ + @Configurable

java - MongoDB 连接问题

java - Selenium WebDriver : Verify Print Window dialog displayed on the page