首页 > 解决方案 > CDI 拦截器与 CDI 事件

问题描述

我有一个关于在 Java EE 中拥有尽可能解耦的系统的最佳实现的问题,问题是使用 CDI 事件或 CDI 拦截器是否更好,显然对于诸如安全性之类的事情将是一个拦截器,对于日志根据具体情况举例这两者中的任何一个,但对于必须完成某个任务而执行另一个任务的业务规则。

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

标签: javajakarta-eedesign-patternscdi

解决方案


拦截器和事件无关。它们服务于不同的目的。

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

拦截器属于“代码不知道或不关心正在发生的事情”的类型,其中代码积极参与事件,因为代码必须生成它们。只是代码并不关心他们会发生什么。

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

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


推荐阅读