详细的加载过程可以查看:https://blog.csdn.net/u010597819/article/details/86646227
- 准备环境:各种环境变量,properties配置加载
- 创建应用上下文:根据环境选择以哪种上下文类型创建,注册内置BeanPostProcessor处理器(例如:auto wire等)
- 刷新应用上下文
- 获取Bean工厂:创建DefaultListableBeanFactory
- 回调当前上下文中已注册的注册中心及工厂后置动作:即BeanDefinitionRegistryPostProcessor及BeanFactoryPostProcessor类型的实现,后置动作中包含了加载BeanDefinition定义:各种注解或者XML配置的定义
- 注册BeanPostProcessor
- 注册监听器
- 完成初始化:初始化非懒惰初始化的Bean
- 创建Bean
- 回调MergedBeanDefinitionPostProcessor对Bean进行修改
- 是否允许提前曝光对象,如果是则添加至缓存并添加回调SmartInstantiationAwareBeanPostProcessor(通知当前已提前曝光的Bean对象)
- 回调InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation通知当前已实例化的Bean
- 回调InstantiationAwareBeanPostProcessor.postProcessPropertyValues对Property属性Value进行后置处理
- 注入组装Bean实例populateBean
- 初始化bean
- 如果Bean是通知类型,BeanNameAware、BeanClassLoaderAware、BeanFactoryAware,则首先回调相应的通知
- 回调初始化之前的处理postProcessBeforeInitialization
- 完成初始化:调用Bean初始化方法
- 回调初始化之后的处理postProcessAfterInitialization
- 初始化完成回调SmartInitializingSingleton类型后置动作afterSingletonsInstantiated
- 至此完成IOC加载