Skip to content

Spring Event

Spring Event 其实就是一个观察者设计模式,一个 Bean 处理完成任务之后,希望通知其他的 bean 或者说一个 Bean 想观察另一个 Bean 的行为。

事件对象

java
@ToString
public class RequestEvent extends ApplicationEvent {

    private String username;

    public RequestEvent(Object source,String username) {
        super(source);
        this.username = username;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

事件发布者

java
@Slf4j
@Component
@AllArgsConstructor
public class RequestEventPusher {
    private ApplicationContext applicationContext;

    public void pushEvent(String username) {
        log.info("发送者发送消息:{}",username);
        applicationContext.publishEvent(new RequestEvent(this,username));
    }
}

事件消费者

同步消费

java
@Component
@Slf4j
public class RequestEventListener implements ApplicationListener<RequestEvent> {
    @Override
    public void onApplicationEvent(RequestEvent event) {
        log.info("RequestEventListener-收到消息:{}",event.getUsername());
    }
}

异步消费

java
@EnableAsync
java
@Component
@Slf4j
public class RequestEventAsyncListener {
    @Async
    @EventListener(RequestEvent.class)
    public void listenerRequestEvent(RequestEvent requestEvent) {
        log.info("RequestEventAsyncListener 收到消息:{}",requestEvent.getUsername());
    }
}