• J.Smile
    2020-12-12
    总结: ①添加当前ApplicationContext的linstener到ApplicationEventMulticaster。 ②添加beanFactory中注册的listener的Bean到ApplicationEventMulticaster,等事件触发的时候对bean初始化。 ③播放早期的注册的事件,在这是因为early事件注册的时候ApplicationEventMulticaster还不存在。

    作者回复: 发现一名学习课代表

    
    
  • fullmoon
    2021-01-12
    AbstractApplicationContext#registerListeners() 方法,主要获取到所有的 ApplicationListener,并广播早期事件,会做以下事情: 1. 将当前 Spring 应用上下文已有的 ApplicationListener 依次添加至事件广播器 2. 从底层 BeanFactory 容器中获取所有 ApplicationListener 类型的 beanName 们(还未初始化),然后依次添加至事件广播器 3. 复制全部的 `earlyApplicationEvents` **早期事件**,然后将 `earlyApplicationEvents` 置为 `null` 4. 广播**早期事件**,如果 ApplicationListener 能够处理该事件,则会通过依赖注入的方式初始化该 ApplicationListener **早期事件**:在当前 Spring 应用上下文刷新的过程中已经发布的事件(此时发布不会被监听到,因为 ApplicationListener 才刚全部找到,需要到此处通过事件广播器进行广播)
    
    