示例代码:下面代码创建了一个喂兔粮的事件提醒,如果到中午12点了,就提示该喂兔粮了
public class MyEvent extends ApplicationEvent {
public MyEvent(Object source) {
super(source);
}
}
public class MyListener implements ApplicationListener<MyEvent> {
@Override
public void onApplicationEvent(MyEvent event) {
System.out.println("该喂二抱三抱兔粮了,兔粮的品牌是:" + event.getSource());
}
}
public static void main(String[] args) throws Exception {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MyListener.class);
while(如果到中午12点){
ctx.publishEvent(new MyEvent("洁西牌(JESSIE)"));
}
}
ApplicationContext
接口实现了ApplicationEventPublisher
,所以具有publishEvent的功能,而publishEvent在底层调用的又是ApplicationEventMulticaster(实现类SimpleApplicationEventMulticaster)
的广播方法进行推送消息的
@Override
public void multicastEvent(final ApplicationEvent event, @Nullable ResolvableType eventType) {
ResolvableType type = (eventType != null ? eventType : resolveDefaultEventType(event));
Executor executor = getTaskExecutor();
for (ApplicationListener<?> listener : getApplicationListeners(event, type)) {
if (executor != null) {
executor.execute(() -> invokeListener(listener, event));
}
else {
invokeListener(listener, event);
}
}
}