最近在阅读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());
}
}
验证通过。证明监听事件能够监听到发布事件的发布。