1、定义事件继承ApplicationEvent
/**
* 订单完成事件
*/
@Getter
public class OrderFinishedEvent extends ApplicationEvent {
private final Order order;
public OrderFinishedEvent(Object source, Order order) {
super(source);
this.order = order;
}
}
2、发布事件
@Resource
private ApplicationContext applicationContext;
applicationContext.publishEvent(new OrderFinishedEvent(this, order));
3、监听事件
(1)实现ApplicationListener
@Component
public class FirstOrderFinishedListener implements ApplicationListener<OrderFinishedEvent> {
@Override
public void onApplicationEvent(OrderFinishedEvent event) {
Order order = event.getOrder();
...
}
}
(2)注解@EventListener
// ({可监听多个事件,逗号分隔})
@EventListener(OrderFinishedEvent.class)
// 参数0或1个,返回类型任意(异步@Async时不能返回原生类型如boolean)
public void onApplicationEvent(OrderFinishedEvent event) {
logger.info("订单完成:{}", JSON.toJSONString(event));
Order order = event.getOrder();
}
备注:监听事件通常会异步处理,方法加上注解 @Async(“threadPoolTaskExecutor”),使用指定线程池异步处理。