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("测试是否继续进行下去"); } }