用 Java 事件(Event)机制,本质上是为了解耦、扩展和可维护。下面从“为什么要用”以及“解决了什么问题”两个角度说清楚。
class OrderService {
public void createOrder() {
// 1. 保存订单
// 2. 发短信
// 3. 发邮件
// 4. 记录日志
}
}
问题:
class OrderService {
public void createOrder() {
// 只发布事件
eventPublisher.publish(new OrderCreatedEvent());
}
}
@EventListener
public void onOrderCreated(OrderCreatedEvent e) {
// 发短信
}
@EventListener
public void onOrderCreated(OrderCreatedEvent e) {
// 发邮件
}
✅ 订单服务 不知道 谁在监听
✅ 新增功能只加监听器,不改原代码
@Async
@EventListener
public void handle(OrderCreatedEvent e) {}
事件名即业务含义:
OrderPaidEventUserRegisteredEvent比“调方法”更清晰、可追溯
✅ 下单后通知
✅ 用户注册送券
✅ 状态变更触发流程
✅ 系统间解耦(配合 MQ)
✅ 领域驱动设计(DDD)
❌ 强一致性要求(必须立即失败)
❌ 简单 CRUD,无扩展需求
❌ 团队不熟悉,反而增加复杂度
Java 事件不是为了“炫技”,而是为了把“发生了什么”和“该做什么”分开。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。