• Spring IOC过程


    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定义之后,进行自定义解析

  • 相关阅读:
    硬件设计问题——持续更新
    PCB设计资源整理
    PCB层叠设计和电源分割
    PCB设计技巧
    铜厚电流、Layout 3W原则 20H原则 五五原则
    final关键字
    面向对象——继承与组合
    面向对象——继承
    this总结
    static总结
  • 原文地址:https://www.cnblogs.com/panning/p/9725208.html
Copyright © 2020-2023  润新知