美文网首页
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