Spring事件驱动模型,简单来说类似于Message-Queue消息队列中的Pub/Sub发布/订阅模式,也类似于Java设计模式中的观察者模式。
1. 创建一个通用泛型事件模型
@Data
public class CommonSpringEvent<T> {
private T data;
protected boolean success;
public CommonSpringEvent(T data, boolean success) {
this.data = data;
this.success = success;
}
}
2. 创建一个对象集成该通用模型
public class PatronEvent extends CommonSpringEvent{
public PatronEvent(Patron data, boolean success) {
super(data, success);
}
}
3. 发布事件
//注入ApplicationEventPublisher发布
@Autowired
private ApplicationEventPublisher applicationEventPublisher;
//发布事件
applicationEventPublisher.publishEvent(new PatronEvent(patron, true));
3. 监听事件
//@EventListener监听注解,@Async异步执行
@Async
@EventListener(condition = "#event.success")
public void handleSuccessful(PatronEvent event) {
logger.info("PatronEvent{}", event);
Patron patron = (Patron) event.getData();
logger.info("===Patron{}===", JSON.toJSONString(patron));
}