java - CDI 拦截器与 CDI 事件
问题描述
我有一个关于在 Java EE 中拥有尽可能解耦的系统的最佳实现的问题,问题是使用 CDI 事件或 CDI 拦截器是否更好,显然对于诸如安全性之类的事情将是一个拦截器,对于日志根据具体情况举例这两者中的任何一个,但对于必须完成某个任务而执行另一个任务的业务规则。
撇开异步事件可能发生也可能不发生不谈,我的怀疑更倾向于模块的解耦,因为对于我的概念,事件比拦截器更解耦,因为在拦截器中必须定义包含函数的类拦截,但在事件的情况下,只有消息必须被定义。
解决方案
拦截器和事件无关。它们服务于不同的目的。
拦截器更像是一种“面向方面的编程”风格的编程。正如您所提到的,事件是一个解耦方面。
拦截器属于“代码不知道或不关心正在发生的事情”的类型,其中代码积极参与事件,因为代码必须生成它们。只是代码并不关心他们会发生什么。
两者都有关注点分离的元素。
还应注意 CDI 事件不是异步的。您可以附加异步操作的侦听器,但开箱即用,它们不是。
推荐阅读
- caching - “更高级别”的缓存是指 L 之后或更接近 CPU 的更大数量吗?
- angular - 根据对象中的其他值从列表中删除选项?
- javascript - 在组件中将 Vanilla Javascript 转换为 React 应用程序
- c++ - 未在此范围内声明“周长”
- slurm - Slurm 中的“Slurm 错误:QOSMinNode”是什么意思?
- ios - 无法构建 Objective-C 模块“Framework”,找不到伞头“Framework.h”
- reactjs - axios返回数据无法获取
- dolphindb - 如何在 dolphindb 中查看一个巨大的 cvs 文件中的数据?
- laravel - 发送请求时接收空数组作为输出
- dbforge - 如何在 dbForge Studio 2020 for mySQL 的查询生成器中的表内滚动