# Spring事件发布与监听机制的用法示例 ## 目录 1. [Spring事件机制概述](#spring事件机制概述) 2. [核心组件解析](#核心组件解析) 3. [基础用法示例](#基础用法示例) 4. [高级应用场景](#高级应用场景) 5. [原理深度剖析](#原理深度剖析) 6. [性能优化建议](#性能优化建议) 7. [常见问题解决方案](#常见问题解决方案) 8. [与其他技术的对比](#与其他技术的对比) 9. [最佳实践总结](#最佳实践总结) 10. [未来发展趋势](#未来发展趋势) --- ## Spring事件机制概述 Spring事件机制是基于观察者模式实现的解耦方案,主要由三部分组成: - 事件(ApplicationEvent):继承自`java.util.EventObject` - 事件发布者(ApplicationEventPublisher) - 事件监听器(ApplicationListener) ### 设计思想 1. **松耦合架构**:组件间通过事件通信,避免直接依赖 2. **同步/异步处理**:默认同步执行,支持异步扩展 3. **上下文传播**:事件可以跨ApplicationContext传播 ### 典型应用场景 - 用户注册后的邮件通知 - 订单状态变更的后续处理 - 系统监控指标的采集 - 缓存更新后的联动操作 --- ## 核心组件解析 ### 1. ApplicationEvent 体系 ```java // 自定义事件示例 public class OrderCompletedEvent extends ApplicationEvent { private final Order order; public OrderCompletedEvent(Object source, Order order) { super(source); this.order = order; } // getters... } @Service public class OrderService { @Autowired private ApplicationEventPublisher publisher; public void completeOrder(Order order) { // 业务逻辑... publisher.publishEvent(new OrderCompletedEvent(this, order)); } } @Component public class OrderEventListener implements ApplicationListener<OrderCompletedEvent> { @Override public void onApplicationEvent(OrderCompletedEvent event) { // 处理逻辑 } } @Component public class OrderAnnotationListener { @EventListener public void handleOrderComplete(OrderCompletedEvent event) { // 处理逻辑 } } @Configuration public class EventConfig { @Bean public ApplicationEventMulticaster applicationEventMulticaster() { return new SimpleApplicationEventMulticaster(); } } @Configuration public class AsyncEventConfig { @Bean(name = "applicationEventMulticaster") public ApplicationEventMulticaster simpleApplicationEventMulticaster() { SimpleApplicationEventMulticaster multicaster = new SimpleApplicationEventMulticaster(); multicaster.setTaskExecutor(new SimpleAsyncTaskExecutor()); return multicaster; } } @EventListener(condition = "#event.order.amount > 100") public void handleLargeOrder(OrderCompletedEvent event) { // 仅处理金额大于100的订单 } @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) public void handleAfterCommit(OrderPaidEvent event) { // 事务提交后执行 } @Order(1) @EventListener public void firstHandler(OrderEvent event) {...} @Order(2) @EventListener public void secondHandler(OrderEvent event) {...} public class GenericEvent<T> extends ApplicationEvent { private final T data; // 构造方法/getters } @EventListener public void handleStringEvent(GenericEvent<String> event) {...} ApplicationEventPublisher.publishEvent()AbstractApplicationContext.publishEvent()ApplicationEventMulticaster.multicastEvent()ApplicationListener.onApplicationEvent()classDiagram ApplicationEvent <|-- PayloadApplicationEvent ApplicationEvent <|-- ContextRefreshedEvent ApplicationListener <|.. GenericApplicationListener ApplicationEventPublisher <|.. AbstractApplicationContext ApplicationEventMulticaster <|.. SimpleApplicationEventMulticaster // 错误示例 @Service public class ServiceA { @Autowired ServiceB b; @EventListener // 可能导致循环依赖 public void handle(Event e) { b.method(); } } | 特性 | Spring事件 | MQ系统 | Reactive Streams |
|---|---|---|---|
| 交付保证 | 至少一次 | 可配置 | 背压控制 |
| 耦合度 | 紧 | 松 | 中等 |
| 性能 | 中等 | 高 | 高 |
OrderCreatedEvent本文详细示例代码可参考:GitHub示例仓库 “`
(注:此为精简版大纲,完整15,250字文章需要扩展每个章节的详细说明、代码示例、性能测试数据、实际案例分析和原理图示等内容。实际撰写时需要补充完整各部分细节。)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。