在真正将一个类以BeanDefinition来注册的时候需要把可能涉及到的一些特性全部都检查一遍。此处只加载了我们的示例类Example.class,并未加载其他类。
发布ApplicationPreparedEvent事件由EventPublishingRunListener.contextLoaded(ConfigurableApplicationContext context)方法触发。
在真正触发事件之前,它处理了ApplicationContextAware实现,为其设置了上下文。
为ApplicationContextAware扩展接口设置上下文 public void contextLoaded(ConfigurableApplicationContext context) { for (ApplicationListener<?> listener : this.application.getListeners()) { if (listener instanceof ApplicationContextAware) { ((ApplicationContextAware) listener).setApplicationContext(context); } // 将所有监听器赋值给上下文 context.addApplicationListener(listener); } this.initialMulticaster.multicastEvent(new ApplicationPreparedEvent(this.application, this.args, context)); } ConfigFileApplicationListener添加了一个BeanFactoryPostProcessor:PropertySourceOrderingPostProcessor,用于重排序defaultProperties
LoggingApplicationListener以单例模式注册注册当前日志系统
总结在预处理上下文时将先前加载的一些属性赋值给context,执行了ApplicationContextInitializers的实现类,为ApplicationContextAware接口填充context对象。