在单系统中的异步调用中使用 是基于spring 的事件编程, 事件驱动模型 我们日常中 说的观察者模式.
事件驱动的几个要素
- 事件源 只要是事件都会有一个发起的地方,负责产生事件的对象 ApplicationEventPublisher.publishEvent()
- 事件 称之为事件对象 是发送事件的核心 继承 ApplicationEvent
- 事件监听器 对每个事件的发生进行监听 可以继承 ApplicationListene 也可以通过注解实现
事件驱动的好处:
- 无耦合的关联
- 异步消息的传递
- 发布订阅模式 多对多
代码的实现:
事件
public class HelloEvent extends ApplicationEvent {
public HelloEvent(Object source) {
super(source);
}
}
事件源 这里可以通过ApplicationContext 也可以用 ApplicationEventPublisher 是继承关系 注意 要在一个事物里面
@Autowired
private ApplicationContext ac;
@Transactional
public void order() {
System.out.println("下單成功");
ac.publishEvent(new HelloEvent("发布了一个事件"));
System.out.println("main綫程執行結束");
}
监听者 (这里可以通过继承ApplicationListener 和 TransactionalEventListener 的方式实现监听)
@Component
public class CarListener implements ApplicationListener<HelloEvent> {
@Override
//@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
public void onApplicationEvent(HelloEvent helloEvent) {
System.out.println("事件执行的方法");
}
}