3 回答
TA贡献1811条经验 获得超5个赞
问题已解决,但仍有问题。
我正在使用 2 个方面类,其顺序设置为Ordered.HIGHEST_PRECEDENCE
和Ordered.LOWEST_PRECEDENCE
。如果我Ordered.HIGHEST_PRECEDENCE
用另一个值替换订单值,错误就会消失。相当奇怪的现象,异常显示与实际原因无关。有谁知道真正的原因?
TA贡献1725条经验 获得超7个赞
这是因为ExposeInvocationInterceptor没有先加载,导致userAttributes不会被Spring Bean (for CacheFetch)注入参数。
您也可以在以下位置找到评论:
No MethodInvocation found: Check that an AOP invocation is in progress,
and that the ExposeInvocationInterceptor is upfront in the interceptor chain. Specifically,
note that advices with order HIGHEST_PRECEDENCE will execute before ExposeInvocationInterceptor!
并且还有一个问题尝试通过使用来解决此问题PriorityOrdered,但似乎仍未解决。
因此,对于您的问题,有两种解决方案可以解决此问题:
改变
Ordered
不HIGHEST_PRECEDENCE
,也许HIGHEST_PRECEDENCE+1
手动注入 bean
ApplicationContext.getBean
TA贡献2037条经验 获得超6个赞
我发现了另一种情况,可能会使 中的调用无效Exposeinvocationinterceptor
,导致org.springframework.aop.aspectj.aspectjexpressionpointcut ා matches (java.lang.reflect.method, java.lang.class <? >, Java. Lang.Object...)
无法获得有效的方法调用。
具体情况:当有多个aspect时,当一个高优先级aspect异步处理时joinpoint.Processed()
,下一个aspect会切换到一个新的线程,所以无法获取到ThreadLocal变量。
添加回答
举报