Spring IOC加载总结

58 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

详细的加载过程可以查看:blog.csdn.net/u010597819/…

  1. 准备环境:各种环境变量,properties配置加载
  2. 创建应用上下文:根据环境选择以哪种上下文类型创建,注册内置BeanPostProcessor处理器(例如:auto wire等)
  3. 刷新应用上下文
  4. 获取Bean工厂:创建DefaultListableBeanFactory
  5. 回调当前上下文中已注册的注册中心及工厂后置动作:即BeanDefinitionRegistryPostProcessor及BeanFactoryPostProcessor类型的实现,后置动作中包含了加载BeanDefinition定义:各种注解或者XML配置的定义
  6. 注册BeanPostProcessor
  7. 注册监听器
  8. 完成初始化:初始化非懒惰初始化的Bean
  9. 创建Bean
  10. 回调MergedBeanDefinitionPostProcessor对Bean进行修改
  11. 是否允许提前曝光对象,如果是则添加至缓存并添加回调SmartInstantiationAwareBeanPostProcessor(通知当前已提前曝光的Bean对象)
  12. 回调InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation通知当前已实例化的Bean
  13. 回调InstantiationAwareBeanPostProcessor.postProcessPropertyValues对Property属性Value进行后置处理
  14. 注入组装Bean实例populateBean
  15. 初始化bean
  16. 如果Bean是通知类型,BeanNameAware、BeanClassLoaderAware、BeanFactoryAware,则首先回调相应的通知
  17. 回调初始化之前的处理postProcessBeforeInitialization
  18. 完成初始化:调用Bean初始化方法
  19. 回调初始化之后的处理postProcessAfterInitialization
  20. 初始化完成回调SmartInitializingSingleton类型后置动作afterSingletonsInstantiated
  21. 至此完成IOC加载