使用春天事件机制实现异步的方法

  

当把一个事件发布到春天提供的ApplicationContext中被监听器侦测到,就会执行对应的处理方法。

  

<强>事件本身
  事件是一个自定义的类,需要继承春天提供的<代码> ApplicationEvent>         @ data   公开课MyEvent延伸ApplicationEvent {   私人字符串味精;      公共MyEvent(对象来源,字符串味精){   超级(源);   这一点。味精=味精;   }   }      之前      

<强>事件监听
  

  

基本方法是实现<代码> ApplicationListener 接口,自定义一个监听器,实现<代码> onApplicationEvent() 方法,然后添加到<代码> ApplicationContext
  

  

比如:         公共类MyListener实现ApplicationListener{      @Override   公共空间>   @ component   @Slf4j   公开课MyEventHandler {      @EventListener   公共空间handleEvent (MyEvent事件){   log.info(“- - - - - - - - - - - -处理事件:{}”,event.getMsg ());   尝试{   线程。睡眠(5 * 1000 l);   log.info(“事件1 (5 s)处理完成”);   }捕捉(InterruptedException e) {   e.printStackTrace ();   }   }      }      之前      

<强>事件发布
  

  

可以通过上下文对象的发布方法<代码> ConfigurableApplicationContext:: publishEvent() 来发布。
  

  

也可以实现<代码> ApplicationEventPublisherAware 接口来发布(推荐)。

        @ component   @Slf4j   公共类EventService实现ApplicationEventPublisherAware {   公共ApplicationEventPublisher出版商;      @Override   公共空间setApplicationEventPublisher (ApplicationEventPublisher ApplicationEventPublisher) {   这一点。出版商=applicationEventPublisher;   }      doEventWork公共字符串(字符串味精){   log.info(“- - - - - - - - - - - -发布事件:“+味精);   MyEvent事件=new MyEvent(这个,味精);   publisher.publishEvent(事件);   返回“OK”;   }   }      

<强>测试代码
  

        @SpringBootTest   @RunWith (SpringRunner.class)   公开课EventServiceTest {   @ autowired   私人EventService服务;      @Test   公共空间活动(){   字符串味精=癑ava代码”;   service.doEventWork(味精);   }   }      

使用春天事件机制实现异步的方法”> <br/>
  </p>
  <p> <强>注意</强> <br/>
  </p>
  <p>如果2个事件之间是继承关系,会先监听到子类事件,处理完再监听父类。</p>
  
  <pre类=//MyEvent2 MyEvent延伸      @ component   @Slf4j   公开课MyEventHandler {      @EventListener   公共空间handleEvent (MyEvent事件){   log.info(“- - - - - - - - - - - -处理事件:{}”,event.getMsg ());   尝试{   线程。睡眠(5 * 1000 l);   log.info(“事件1 (5 s)处理完成”);   }捕捉(InterruptedException e) {   e.printStackTrace ();   }   }      @EventListener   公共空间handleEvent2 (MyEvent2事件){   log.info(“- - - - - - - - - - - -处理事件2:{}”,event.getMsg ());   尝试{   线程。睡眠(10 * 1000 l);   log.info(“事件2(10)处理完成”);   }捕捉(InterruptedException e) {   e.printStackTrace ();   }   }   }      

当我发布一个子类事件MyEvent2时,日志如下:

  

使用春天事件机制实现异步的方法

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

使用春天事件机制实现异步的方法