ApplicationContextrefresh 方法是 Spring 框架中非常重要的一个方法,它负责初始化和刷新整个应用上下文。这个过程涉及多个步骤,确保所有的 Bean 被正确地创建和初始化。以下是 refresh 方法的主要流程:

  1. 准备阶段

    • 设置启动时间戳。

    • 关闭已存在的单例 Bean 工厂。

    • 准备环境属性。

  2. 加载 Bean 定义

    • 调用 loadBeanDefinitions 方法加载 Bean 定义。

    • 这个步骤通常由具体的子类实现,例如 XmlWebApplicationContext 会从 XML 配置文件中加载 Bean 定义,而 AnnotationConfigApplicationContext 会从注解配置类中加载 Bean 定义。

  3. 准备 Bean 工厂

    • 创建并配置 BeanFactory

    • 注册事件监听器。

    • 注册后处理器(如 BeanPostProcessor)。

  4. 初始化消息源

    • 如果需要,初始化 MessageSource,用于国际化支持。

  5. 初始化应用事件广播器

    • 创建并初始化 ApplicationEventMulticaster,用于广播应用事件。

  6. 提前初始化所有 Bean

    • 调用 finishBeanFactoryInitialization 方法,提前初始化所有非懒加载的单例 Bean。

    • 这一步骤确保所有 Bean 在应用上下文完全启动之前已经准备好。

  7. 完成刷新

    • 调用 finishRefresh 方法,完成刷新过程。

    • 发布 ContextRefreshedEvent 事件,通知所有监听器应用上下文已经刷新完成。