ApplicationContext
的 refresh
方法是 Spring 框架中非常重要的一个方法,它负责初始化和刷新整个应用上下文。这个过程涉及多个步骤,确保所有的 Bean 被正确地创建和初始化。以下是 refresh
方法的主要流程:
准备阶段:
设置启动时间戳。
关闭已存在的单例 Bean 工厂。
准备环境属性。
加载 Bean 定义:
调用
loadBeanDefinitions
方法加载 Bean 定义。这个步骤通常由具体的子类实现,例如
XmlWebApplicationContext
会从 XML 配置文件中加载 Bean 定义,而AnnotationConfigApplicationContext
会从注解配置类中加载 Bean 定义。
准备 Bean 工厂:
创建并配置
BeanFactory
。注册事件监听器。
注册后处理器(如
BeanPostProcessor
)。
初始化消息源:
如果需要,初始化
MessageSource
,用于国际化支持。
初始化应用事件广播器:
创建并初始化
ApplicationEventMulticaster
,用于广播应用事件。
提前初始化所有 Bean:
调用
finishBeanFactoryInitialization
方法,提前初始化所有非懒加载的单例 Bean。这一步骤确保所有 Bean 在应用上下文完全启动之前已经准备好。
完成刷新:
调用
finishRefresh
方法,完成刷新过程。发布
ContextRefreshedEvent
事件,通知所有监听器应用上下文已经刷新完成。