https://www.processon.com/diagraming/5c96171fe4b0f88919b98497

1. AbstractApplicationContext:执行refresh()方法;让子类实现obtainFreshBeanFactory()方法;
2. 子类AbstractRefreshableApplicationContext实现refreshBeanFactory()方法
  创建IOC容器(DefaultListableBeanFactory);
  委派子类实现loadBeanDefinitions()方法;
3. AbstractXmlApplicationContext:执行loadBeanDefinition()
  创建XmlBeanDefinitionReader(Bean容器读取器,容器使用该读取器读取Bean定义资源);
  loadBeanDefinitions(beanDefinitionReader);
  setConFigLocations();获取配置文件路径;
  reader.loadBeanDefinitions(configLocations):Bean容器读取器读取定位Bean定义资源.
4. AbstractBeanDefinitionReader:执行loadBeanDefinitions
  getResourceLoader():获取IOC容器初始化过程中设置的资源加载器
  Resource[] resources = ((ResourcePatternResolver) resourceLoader).getResources(location);将指定位置的 Bean 定义资源文件解析为 Spring IOC 容器封装的资源
  int count = loadBeanDefinitions(resources); 委派调用其子类 XmlBeanDefinitionReader 的方法,实现加载功能
5. XmlBeanDefinitionReader:执行doLoadBeanDefinitions()
  doLoadDocument:将XML文件转换为DOM对象;
  registerBeanDefinitions:解析Bean的详细过程;
  创建BeanDefinitionDocumentReader:用来对xml格式的BeanDefinition解析;
  DocumentReader.registerBeanDefinitions:具体的解析实现过程由DefaultBeanDefinitionDocumentReader来实现。
6. DefaultBeanDefinitionDocumentReader:执行registerBeanDefinitions
  创建BeanDefinitionParserDelegate对象用来真正执行解析Bean的工作
  preProcessXml:解析Bean定义之前,进行自定义解析
  parseBeanDefinitons()
    parseDefaultElement:使用Spring的Bean规则解析元素节点
      解析<Import>元素
      解析<Alias>元素
      解析<Bean>元素
        获取BeanDefinitionHolder(BeanDefinitionHolder 是对 BeanDefinition 的封装,即Bean定义的封装类)
          BeanDefinitionParserDelegate.parseBeanDefinitionElement
            parseBeanDefinitionElement:详细对<Bean>元素中配置的 Bean 定义进行解析的地方
        BeanDefinitionReaderUtils.registerBeanDefinition:向Spring IOC容器注册解析得到的Bean定义,这是Bean定义向IOC容器注册的入口
        registry.registerBeanDefinition(beanName, definitionHolder.getBeanDefinition()):向 IOC 容器注册 BeanDefinition
      解析嵌套Bean元素
    postProcessXml:解析Bean定义之后,进行自定义解析

最新文章

  1. php stdclass转数组
  2. [转]AS3的垃圾回收
  3. Apache Spark-1.0.1集群搭建
  4. iOS-UIView-设置背景图片4种方式
  5. DIV使用tabindex获得事件详解 移动div
  6. php开发memcached
  7. linux 下的使用 ln 创建 软链接 和 硬链接
  8. python类定义
  9. for语句,range() 函式
  10. C#集合类型大揭秘 【转载】
  11. CentOS7+CDH5.14.0安装CDH错误排查: HiveServer2 该角色的进程已退出。该角色的预期状态为已启动
  12. PMP三点
  13. HDU 1160
  14. Linux 分支那么多,这里可以帮你缩小选择范围
  15. 列式数据库~clickhouse 底层存储原理
  16. 异常的Error与Exception
  17. FZU-SE-K 第一次累计得分排行榜
  18. Java Callable和Future简述
  19. SharpGL学习笔记(九) OpenGL的光照模型, 术语解释
  20. nodejs初探一二

热门文章

  1. jQuery(表单选择器)
  2. HDU 3292
  3. rails create方法ActiveModel::ForbiddenAttribute的问题
  4. 让VMware ESXi虚拟交换机支持VLAN
  5. zzulioj--1858--单词翻转(模拟)
  6. 几种AutoLayout自动布局所经常使用的布局约束类型
  7. POJ 3260 DP
  8. MarkDown 语法备份
  9. Java基础——环境变量(PATH)和类变量(CLASSPATH)
  10. 立即执行函数与Function