开始使用
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 )
}