为什么InvocationInterceptor在开发模式下处于活动状态



今天,在分析Quarkus应用程序时,我发现当Quarkus在开发模式下运行时,io.quarkus.arc.runtime.devconsole.InvocationInterceptor似乎会拦截(几乎?(所有bean类,尽管Interceptor有一个应用程序代码中没有使用的InterceptorBinding。

@Inherited
@InterceptorBinding
@Target({ TYPE, METHOD })
@Retention(RUNTIME)
public @interface Monitored {
}

@Priority(Interceptor.Priority.LIBRARY_BEFORE)
@Monitored
@Interceptor
public class InvocationInterceptor {
//...
}

有人能向我解释为什么会这样吗?我真的不知道这是故意的行为还是错误。InterceptorBinding是否在构建过程中自动散布在我的应用程序中?我查看了代码,但找不到发生这种情况的地方。

为什么我对此感兴趣?这个拦截器所做的记账使用CopyOnWriteArrayList(在Invocation.Builder内部(,在热循环中,它将快速生成该列表的数万个副本。今天,当我分析应用程序时,这让我非常困惑,因为prod和dev模式的内存需求差异很大。

(如果相关:所有这些都发生在Quarkus 2.7.3.Final中(

这本质上是@Ladicek的评论:

[行为]是故意的,但有人讨论它应该默认关闭。在任何情况下,都有一个配置属性来关闭它

我还能够找到具有魔力的BuildExtension:它位于io.quarkus.arc.deployment.devconsole.ArcDevConsoleProcessor内部。

相关内容

最新更新