Spring IOC过程
2021-06-16 16:03
                         标签:imp   parser   源文件   port   详细   ini   加载   resolve   process    1. AbstractApplicationContext:执行refresh()方法;让子类实现obtainFreshBeanFactory()方法;   Spring IOC过程 标签:imp   parser   源文件   port   详细   ini   加载   resolve   process    原文地址:https://www.cnblogs.com/panning/p/9725208.html
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规则解析元素节点
			      解析
			      解析元素
			      解析
				        获取BeanDefinitionHolder(BeanDefinitionHolder 是对 BeanDefinition 的封装,即Bean定义的封装类)
					          BeanDefinitionParserDelegate.parseBeanDefinitionElement
						            parseBeanDefinitionElement:详细对
				        BeanDefinitionReaderUtils.registerBeanDefinition:向Spring IOC容器注册解析得到的Bean定义,这是Bean定义向IOC容器注册的入口
				        registry.registerBeanDefinition(beanName, definitionHolder.getBeanDefinition()):向 IOC 容器注册 BeanDefinition
			      解析嵌套Bean元素
	    postProcessXml:解析Bean定义之后,进行自定义解析