code: @Async
      public void fireEventAsync(Object publisher, FireAfterTransactionAsynchronous events) throws Exception {
          for (int i = 0; i < events.events().length; i++) {
              Class<? extends EventObject> event = events.events()[i];
              if (RootApplicationEvent.class.isAssignableFrom(event)) {
                  LOGGER.debug("Sending event: [{}]", event);
                  ctx.publishEvent((RootApplicationEvent) event.getConstructor(Object.class).newInstance(publisher));
              }
          }
      }
docs: Only {@link ApplicationEvent}s are created and published over Springs
  {@link ApplicationContext}.
  
  @param publisher The instance that is publishing the event
  @param events Stores a list of event classes to fire
  @throws Exception Any exception is re-thrown