当把一个事件发布到春天提供的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(味精); } }//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时,日志如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
使用春天事件机制实现异步的方法