开始使用
1. 事件发送器
@Autowired ApplicationEventPublisher eventPublisher;
2. 发送事件
//订单准备工作完成 , 使订单生效 eventPublisher.publishEvent(new OrderEffectEvent(order.getId()));
例子 OrderEffectEvent类的定义(其实就是一个普通的java bean)
public final class OrderEffectEvent implements IOrderEvent { @Getter private final String orderId; public OrderEffectEvent(String orderId) { this.orderId = orderId; }}
3 在需要处理的地方接收发送的事件,使用@EventListener 注解
/** * 使订单生效 * * @param event 订单生效事件 * @return */ @EventListener public void handlerEffectOrder(OrderEffectEvent event) { // do some thing }
@EventListener 还支持事件过滤,例如 下面这个例子只想接收到 订单业务类型为 MONTHLY 的事件
注意 condition 内容为sqEl 表达式 需要返回类型为 boolean
/** * 订单未支付,取消业务状态 * * @param event 订单事件 */ @EventListener(condition = "T(com.xxx.Order.BizType).MONTHLY eq #event.orderType") public void handlerEvent(OrderPayExpireEvent event) { }
注意 泛型也是支持的
/** * * @param event 新增事件 */ @EventListener public void handlerEvent(ICreateEvent event) { // switch (event) // if(event instanceof OrderCreateEvent ) }