Disable/Enable 运行时的拦截器

Disable/Enable interceptor at runtime

我有一些拦截器用于调试(性能、方法使用记录等)我们的 JavaEE 应用程序。

在生产系统中,我不希望默认启用这些拦截器,但我希望有可能在运行时启用它们(=无需重新部署)。是否有任何可移植的方式来独立于 CDI 实现?如果没有,是否有任何 WELD 特定方法可以做到这一点?

我唯一的解决方案是那些拦截器必须使用的全局标志,但仍然有进入拦截器和评估标志的开销,但没有任何意义。

这是 CDI/Weld 在 bootstrap 时所做的事情之一。例如。对于拦截器,您实际上需要创建一个 "wrapping proxy" 来处理拦截器上的任何额外工作。因此,答案是 - 不,你不能在运行时这样做。

但是,您使用某种标志的方法非常好。拥有拦截器代理(什么也不做)的开销真的很小,你不应该注意到。我可能会采用这种方法。