1.配置资源的来源种类
2.加载资源的多种策略
3.loadBeanDefinitions(EncodedResource encodedResource)
加载一个明确的xml文件
3.1 获取验证xml 的模型 dtd 和 xsd 两种xml 的命名方式 ----
getValidationModeForResource(Resource resource)
3.2 把xml 文件转化为 Docment对象 ----
loadDocument(InputSource inputSource, EntityResolver entityResolver,ErrorHandler errorHandler, int validationMode,booleannamespaceAware)
4.解析Document 对象 转化为BeanDefinitions,并注册在容器中(map集合中) ----
registerBeanDefinitions(Document doc, Resource resource)
4.1 校验profile属性
—root.getAttribute(PROFILE_ATTRIBUTE);
4.2 开始解析 //解析前处理
preProcessXml(root);
//解析
parseBeanDefinitions(root, this.delegate);
//解析后处理
postProcessXml(root);
4.3 解析分为两种:
①//默认的标签解析方式
parseDefaultElement(ele, delegate);
…1判断是否包含import标签,并进行对应逻辑的处理— importBeanDefinitionResource(Element ele)
…2判断是否包含别名标签,并进行相关处理逻辑 — processAliasRegistration(Element ele)
…3解析bean标签 —
processBeanDefinition(Element ele, BeanDefinitionParserDelegate delegate)
…3.1 解析 —
delegate.parseBeanDefinitionElement(ele)
—>解析ele中的各种属性,最后返回一个 BeanDefinitionHolder
…3.2 bdHolder = delegate.decorateBeanDefinitionIfRequired(ele, bdHolder);
…3.3 进行 BeanDefinition 的注册 ---- BeanDefinitionReaderUtils.registerBeanDefinition(BeanDefinitionHolder definitionHolder, BeanDefinitionRegistry registry)
…3.4 解析成的BeanDefinition 进行注册
registerBeanDefinition(String beanName, BeanDefinition beanDefinition)
最后存到了DefaultListableBeanFactory 的
private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);
----> map集合中
…4 递归解析beans标签
--- doRegisterBeanDefinitions(ele)