【事件派发器】
* 1)、容器启动:refresh();
* 2)、initApplicationEventMulticaster();初始化ApplicationEventMulticaster;
* 1)、先去容器中找有没有id=“applicationEventMulticaster”的组件;
* 2)、如果没有this.applicationEventMulticaster = new SimpleApplicationEventMulticaster(beanFactory);
* 并且加入到容器中,就可以在其他组件要派发事件,自动注入这个applicationEventMulticaster;
【获取监听器】
* 1)、容器启动:refresh();
* 2)、registerListeners();
* 从容器中拿到所有的监听器,把他们注册到applicationEventMulticaster中;
* String[] listenerBeanNames = getBeanNamesForType(ApplicationListener.class, true, false);
* //将listener注册到ApplicationEventMulticaster中
* getApplicationEventMulticaster().addApplicationListenerBean(listenerBeanName);
【事件发布】
* 1)、容器启动:refresh();
* 2)、finishRefresh();容器刷新完成会发布ContextRefreshedEvent事件
* 3)、publishEvent(new ContextRefreshedEvent(this));
* 1)、获取事件的派发器:getApplicationEventMulticaster()
* 2)、multicastEvent派发事件:
* 3)、获取到所有的ApplicationListener;
* for (final ApplicationListener<?> listener : getApplicationListeners(event, type)) {
* 1)、如果有Executor,可以支持使用Executor进行异步派发;
* Executor executor = getTaskExecutor();
* 2)、否则,同步的方式直接执行listener方法;invokeListener(listener, event);
* 拿到listener回调onApplicationEvent方法;
* 4)、容器关闭会发布ContextClosedEvent;
---------------------
原文:https://blog.youkuaiyun.com/sjtu_chenchen/article/details/80644646
版权声明:本文为博主原创文章,转载请附上博文链接!