In Boot, if context refresh fails, we publish an ApplicationFailedEvent. We can't rely on the context's multicaster being available at this point so we create our own. It is initialised with the collection of listeners returned by AbstractApplicationContext.getApplicationListeners(). Unfortunately, any listeners that were added after the context's multicaster was initialised are missing from this collection so they do not receive the ApplicationFailedEvent.
In AbstractApplicationContext.addApplicationListener(ApplicationListener<?>), would it be possible to always call this.applicationListeners.add(listener) rather than only calling it when this.applicationEventMulticaster is null?