Spring 容器原理 初始化事件广播器

192 阅读1分钟

ApplicationEventMulticaster 事件广播器

可以管理多个ApplicationListener对象并向其发布事件

initApplicationEventMulticaster();

源码分析

/**
   * Initialize the ApplicationEventMulticaster.
   * Uses SimpleApplicationEventMulticaster if none defined in the context.
   * @see org.springframework.context.event.SimpleApplicationEventMulticaster
   */
  protected void initApplicationEventMulticaster() {
      ConfigurableListableBeanFactory beanFactory = getBeanFactory();
      // 如果容器里配置了 applicationEventMulticaster Bean 直接引用
      if (beanFactory.containsLocalBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME)) {
          this.applicationEventMulticaster =
                  beanFactory.getBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME, ApplicationEventMulticaster.class);
          if (logger.isTraceEnabled()) {
              logger.trace("Using ApplicationEventMulticaster [" + this.applicationEventMulticaster + "]");
          }
      }
      else {
      // 否则使用并注入 SimpleApplicationEventMulticaster 
          this.applicationEventMulticaster = new SimpleApplicationEventMulticaster(beanFactory);
          beanFactory.registerSingleton(APPLICATION_EVENT_MULTICASTER_BEAN_NAME, this.applicationEventMulticaster);
          if (logger.isTraceEnabled()) {
              logger.trace("No '" + APPLICATION_EVENT_MULTICASTER_BEAN_NAME + "' bean, using " +
                      "[" + this.applicationEventMulticaster.getClass().getSimpleName() + "]");
          }
      }
  }

可以通过@Bean 自行注入 applicationEventMulticaster

事件发布

实际就是执行监听器的方法