CDI 拦截器与 CDI 事件

CDI Interceptor vs CDI events

我有一个关于在 java EE 中拥有一个尽可能不耦合的系统的最佳实现的问题,问题是使用 CDI 事件还是 CDI 拦截器更好,显然对于诸如security 将是一个拦截器,例如根据特定情况的日志中的任何一个,但对于必须在执行另一个任务时必须完成特定任务的业务规则。

撇开异步事件可能发生也可能不发生不谈,我的怀疑更倾向于模块的解耦,因为对于我的概念,事件比拦截器更解耦,因为在拦截器中 class 必须定义包含函数的拦截,但在事件的情况下,必须只定义消息。

拦截器和事件无关。它们有不同的用途。

拦截器更像是一种 "Aspect Oriented Programming" 编程风格。正如您所提到的,事件是一个解耦方面。

拦截器属于 "the code doesn't know or care about what's happening" 类型,其中代码主动参与事件,因为代码必须生成它们。只是代码不关心他们会发生什么。

两者都有关注点分离的要素。

还应注意 CDI 事件不是异步的。您可以附加异步操作的侦听器,但开箱即用,它们不是。