Spring文档苦读【ApplicationEvent annotation实现】

如上节所示,我们使用XML的方式进行发布事件,以及接受事件并处理!

现在我们来看一下如何使用注解的方式进行接受事件。

PS:发布事件就不做概述,请查看上节内容

  /**
     * 监听BlackListEvent发布事件
     * @param event
     */
    @EventListener
    public void processBlackListEvent(BlackListEvent event) {
        System.out.println("监听到BlackListEvent被发布");
    }
  /**
     * 监听容器启动事件以及容器刷新事件
     */
    @EventListener({ContextStartedEvent.class, ContextRefreshedEvent.class})
    public void handleContextStart() {
        System.out.println("监听到容器启动事件或者容器刷新事件,请做相应处理");
    }
  /**
     * 判断传入event对象属性test是否是foo,如果是则进入,否则方法不进行进入
     * @param blEvent
     */
    @EventListener(condition = "#blEvent.test == 'foo'")//也可以使用#a0.test=='foo',
    public void processBlackListEventByCondition(BlackListEvent blEvent) {
        System.out.println("blackListEvent.test is 'foo'");
    }
  /**
     * 处理完该事件以后,发布返回的OtherEvent
     * @param event
     * @return
     */
    @EventListener
    public OtherEvent handleBlackListEvent(BlackListEvent event) {
        System.out.println("处理完该事件以后,发布返回的OtherEvent");
    }
  /**
     * 异步事件
     * 当事件里面出现异常,也不会影响正常流程。
     * 即Spring 内部新开了一个线程来处理该事件
     * @param event
     */
    @EventListener
    @Async
    public void processBlackListEvent(BlackListEvent event) {
        System.out.println("异步事件 监听到 BlackListEvent");
        if(true) {
            throw new RuntimeException("测试是否继续进行下去");
        }
    }

 

posted on 2016-11-09 18:50  源码解析  阅读(117)  评论(0编辑  收藏  举报

导航