凌风515
时不我待,只争朝夕

监听器的实现有两种方式:

  1、实现ApplicationListener接口

  2、加@EventListener

1、ApplicationListener用法

ApplicationListener通过监听容器中发布的一些事件,事件发生就会触发监听器的回调,就完成了事件驱动开发

写一个监听器

  • 写一个监听器监听某个事件
    • 实现ApplicationListener
    • 把监听器加入到容器中

只要容器中有相关事件发布,我们就能监听到这个事件

 测试结果:
监听到的两个事件

发布事件

我们可以自己发布事件

2、@EventListener用法

在想监听事件的方法上加上@EventListener注解,注解中指定要监听哪种类型的事件
然后在方法上写上参数,获得监听到的事件

3、项目应用:

  3.1、自定义事件:

  public class TestEvent extends ApplicationEvent {

    private static final long serialVersionUID = -4661614214512524906L;

    public TestEvent(Set<Long> source) {
      super(source);
    }

    @Override
    public Set<Long> getSource() {
      return (Set<Long>)super.getSource();
    }
  }

  3.2、自定义监听器:

  @Slf4j
  @Component
  public class TestEventListerner {

    @Autowired
    private TestService testService;

    @Async
    @EventListener
    public void onEvent(TestEvent event) {
      log.debug("开始批量更新,id:{}", event.getSource());
      for (Long id : event.getSource()) {
        testService.limitChangeNotice(id);
      }
      log.debug("完成批量更新,id:{}", event.getSource());
    }
  }

  3.3、父类Event:ApplicationEvent 源码

  

   3.4、父类Event:EventObject 源码

  3.5、事件发布:

  public Class Test () {

    @Autowired
    private ConfigurableApplicationContext context;

    public static void main(String[] args) {

      Set<Long> set = new HashSet<>();

      set.add(1L);

      set.add(2L);
      context.publishEvent(new TestEvent (set));
    }

  }

  或者 

 

posted on 2022-05-13 14:40  凌风515  阅读(448)  评论(0编辑  收藏  举报