我使用的是quarkus 3.11.2。我定义了一个名为
ABC
的自定义拦截器。现在我已经在一个名为 MyClass
的类上定义了这个拦截器,该类有 myMethod
,它调用 testMethod
的 TestClass
。
TestClass
没有定义这个拦截器,但是当从TestMethod
调用myMethod
时,拦截器仍然被调用。我不知道什么时候以及为什么。当我的应用程序在 tommee 中时,这种情况没有发生,而迁移后它发生在 quarkus 中。
这可能是什么原因?
可能的解决方案是什么?我在方法级别而不是类上尝试了拦截器,它也有效。但是有 100 个类使用它,还有 100 个类没有使用它..有一些更简单的解决方案吗?
如果我正确理解你的设置(鉴于只有口头描述),你就会遇到“自我拦截”的情况。也称为拦截自调用。
这里有一个 Quarkus 文档的链接,解释这确实是有意的行为及其作用。
请记住,自调用是否应该被拦截是拦截器/CDI 规范中的灰色区域,不同的实现选择以不同的方式处理这一点。例如 Weld 不支持,而 Quarkus 支持。
据我所知,在给定的框架中没有办法解决它 - 如果需要可移植性,您最好构建代码以使其不允许这样做。