SpringBoot事件驱动
1、概述
Spring事件驱动采用了观察者设计模式,主要作用就是实现对象之间的松耦合通信。它的核心思想是通过事件的发布和监听来实现不同组件之间的交互。(跟mq挺像)
基础概念:
-
事件(Event): 在Spring中,事件是一个对象,通常是某个动作的表示,比如用户注册、订单提交等。成为事件需要继承ApplicationEvent 的类。
-
事件监听器(Listener): 负责处理特定的事件。类上加@Componse注解,方法上加@EventListener。(如果要做异步处理 需要在方法上加异步注解,然后启动类上开启异步支持)
-
事件发布者(Publisher): 事件发布者是负责发布事件的组件。通过ApplicationEventPublisher,或者ApplicationContext发事件。
2、示例代码
当用户下单时,可以发布一个订单事件,多个监听器可以响应这个事件,例如更新库存、发送确认邮件等。这种方式使得各个模块之间的耦合度降低,增强了系统的灵活性和可维护性。
// 定义事件
public class OrderPlacedEvent extends ApplicationEvent {
private final Order order;
public OrderPlacedEvent(Object source, Order order) {
super(source);
this.order = order;
}
public Order getOrder() {
return order;
}
}
// 监听器
@Component
public class OrderConfirmationListener{
@Order(1) // 优先级
@Async // 异步执行
@EventListener
public void onApplicationEvent(OrderPlacedEvent event) {//方法入参就是要处理的事件
// 处理订单确认逻辑
System.out.println("订单已确认: " + event.getOrder().getId());
}
}
// 发布事件
@Service
public class OrderService {
@Autowired
private ApplicationEventPublisher publisher;
public void placeOrder(Order order) {
// 下单逻辑
publisher.publishEvent(new OrderPlacedEvent(this, order));
}
}