您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。