micrinaut关于监听事件和发布事件(ApplicationEventListener and ApplicationEventPublisher)的一点思考

mac2024-08-09  48

最近在阅读micronaut的文档,在监听事件和发布事件这里有些思考,记录一下。

监听事件和发布事件一同学习比较容易理解。

发布事件ApplicationEventPublisher

发布事件的实现要在类中用@Inject注解注入

@Singleton public class SampleEventEmitterBean{ @Inject private ApplicationEventPublisher eventPublisher; public void publishSampleEvent(){ eventPublisher.publishEvent(new SampleEvent()); } }

监听事件ApplicationEventListener

监听事件的实现 ①可通过方法实现ApplicationEventListener这一接口中的onApplicationEvent()这个方法。

@Singleton public class SampleEventListener implements ApplicationEventListener<SampleEvent> { private int invocationCounter = 0; @Override public void onApplicationEvent(SampleEvent event){ invocationCounter++; } public int getInvocationCounter(){ return invocationCounter; } }

②可以通过@EventListener注解的方式,来实现事件监听,此方法也通过了测试。

@Singleton public class AnnotationListener { private int invocationCounter = 0; @EventListener public void onSampleEvent(SampleEvent event){ invocationCounter++; } public int getInvocationCounter(){ return invocationCounter; } }

注意

我这个demo里面事件发布和事件监听的对象,是SampleEvent类。要注意这个对象的位置。

监听和发布的验证测试

public class SampleEventListenerSpec { @Test public void testEventListenerIsNotified(){ ApplicationContext context = ApplicationContext.run(); SampleEventEmitterBean emitter = context.getBean(SampleEventEmitterBean.class); SampleEventListener listener = context.getBean(SampleEventListener.class); assertEquals(0,listener.getInvocationCounter()); emitter.publishSampleEvent(); assertEquals(1,listener.getInvocationCounter()); } }

验证通过。证明监听事件能够监听到发布事件的发布。

最新回复(0)