Spring的事件驱动模型

简介

Spring的事件驱动模型,是发布/订阅模式(Publish–subscribe pattern)的实现,或者简单的称之为发布/订阅模式(Publish–subscribe pattern)。主要包括以下几类角色:

  • 事件(ApplicationEvent):需要处理的event本身,继承自Java自身的EventObject
  • 发布者(ApplicationEventPublisher):事件的发布者,用它进行事件的发布
  • 广播(ApplicationEventMulticaster):类似于发布/订阅模式(Publish–subscribe pattern)中Broker的一个概念,负责event存储管理及event的广播
  • 订阅者(ApplicationListener):监听广播出来的不同类别的event

实现

event

public class TestEvent extends ApplicationEvent {

    public TestEvent(String message) {
        super(message);
    }
}

publisher

BasePublisher

@Component
public class BasePublisher implements ApplicationEventPublisherAware {

    private ApplicationEventPublisher applicationEventPublisher;

    @Override
    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
        if (Objects.isNull(this.applicationEventPublisher)) {
            this.applicationEventPublisher = applicationEventPublisher;
        }
    }

    public void publish(Object o) {
        this.applicationEventPublisher.publishEvent(o);
    }
}

TestPublisher

@Component
public class TestEventPublisher extends BasePublisher {

    /**
     * Simulate an event on application start
     */
    @PostConstruct
    public void init() {
        this.publish(new TestEvent("test-message"));
    }
}

TestListener

@Slf4j
@Component
public class TestListener implements ApplicationListener<TestEvent> {

    @Override
    public void onApplicationEvent(TestEvent testEvent) {
        log.error("receive event:{}", testEvent.getSource());
    }
}

运行结果

results matching ""

    No results matching ""