Spring 容器加载过程¶
一、整体流程¶
二、详细步骤¶
1. 创建 BeanFactory¶
2. 加载 BeanDefinition¶
扫描包,解析 @Component、@Bean,把类信息存成 BeanDefinition:
3. BeanFactoryPostProcessor¶
在 Bean 实例化前,允许修改 BeanDefinition。
4. 实例化 Bean¶
按 BeanDefinition 创建对象: - 推断构造函数。 - 实例化(new)。 - 属性填充(populateBean)。
5. Aware 接口¶
- BeanNameAware
- BeanFactoryAware
- ApplicationContextAware
6. BeanPostProcessor 前置¶
postProcessBeforeInitialization。
7. 初始化¶
- afterPropertiesSet
- init-method
8. BeanPostProcessor 后置¶
postProcessAfterInitialization(AOP 代理在这里生成)。
9. 完成¶
单例都实例化完,容器就绪。
三、refresh() 方法¶
Spring 容器核心方法,做了 13 件事:
- prepareRefresh
- obtainFreshBeanFactory
- prepareBeanFactory
- postProcessBeanFactoryFactory
- invokeBeanFactoryPostProcessors
- registerBeanPostProcessors
- initMessageSource
- initApplicationEventMulticaster
- onRefresh
- registerListeners
- finishBeanFactoryInitialization(实例化所有单例)
- finishRefresh
四、一句话¶
容器加载 = 读配置 → 实例化 → 填充 → 初始化 → 后置处理。
高频
第 11 步 finishBeanFactoryInitialization 是最核心的,所有单例 Bean 在这一步创建。