美文网首页
Spring Event 观察者模式

Spring Event 观察者模式

作者: 一滴矿泉水 | 来源:发表于2023-11-13 21:43 被阅读0次

Spring 基于观察者模式实现了自身的事件机制,由三部分组成:

  • 事件 ApplicationEvent: 通过继承它,实现自定义事件。

  • 事件发布者 ApplicationEventPublisher: 通过它,可以进行事件的发布。

  • 事件监听器 ApplicationListener: 通过实现它,进行指定类型的事件的监听。

注册事件

public class PublisherEvent extends ApplicationEvent {
    /**
     * 事件 id
     */
    @Getter
    private final Long eventId;

    /**
     * @param eventId Long
     */
    public PublisherEvent(Object source, Long eventId) {
        super(source);
        this.eventId = eventId;
    }

}

事件监听

方法一:实现(ApplicationListener接口)

@Slf4j
@Component
public class ApplicationEventListener implements ApplicationListener {
    @Async
    @SneakyThrows
    public void onApplicationEvent(ApplicationEvent applicationEvent) {
        PublisherEvent one =(PublisherEvent)applicationEvent;
        log.info("监听到数据(PublisherEvent) --->{}",one.getEventId());
        log.info("监听到数据类型(PublisherEvent) --->{}",one.getSource());
    }

}

方法二:使用(@EventListener注解)

@Slf4j
@Component
public class ApplicationEventListener{
    @Async
    @SneakyThrows
    @EventListener(value = PublisherEvent.class)
    public void onApplicationEvent(ApplicationEvent applicationEvent) {
        PublisherEvent one =(PublisherEvent)applicationEvent;
        log.info("监听到数据(PublisherEvent) --->{}",one.getEventId());
        log.info("监听到数据类型(PublisherEvent) --->{}",one.getSource());
    }
}

@EventListener可以指定接收的事件类型 @EventListener(value = PublisherEvent.class)

事件发布

@RestController
@RequestMapping("/event/publisher")
public class testController {
    @Resource
    ApplicationEventPublisher applicationEventPublisher;

    @PostMapping
    public void testEventPublisher(){
        PublisherEvent dto = new PublisherEvent(this,1000L);
        applicationEventPublisher.publishEvent(dto);
    }

}

文章持续更新中、希望对各位有所帮助、有问题可留言 大家共同学习 !

相关文章

网友评论

      本文标题:Spring Event 观察者模式

      本文链接:https://www.haomeiwen.com/subject/dtedwdtx.html