spring 基于事件编程 demo

在单系统中的异步调用中使用 是基于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("事件执行的方法");
    }
}

猜你喜欢

转载自blog.csdn.net/hgdzw/article/details/106302229
今日推荐