SPRIN06_源码之核心组件接口BeanDefinition、Debug创建流程、流程图总结(六)

简介: SPRIN06_源码之核心组件接口BeanDefinition、Debug创建流程、流程图总结(六)

⑩③. 接下来继续跟踪debug堆栈–如上图,继续来进行加载,InputSource它把所有的资源拿过来,准备好以后有一个方法叫doLoadBeanDefinitions,就是层层加载,然后继续下边跟踪堆栈-入下图,有一个叫registerBeanDefinitions,这个registerBeanDefinitions方法里面传入了一个doc,事实上它最后引入了第三方的dom解析工具来把整个xml配置变成一个Document文档 也就是org.w3c.dom,这一块Document文档的流程大概了解下就行了


微信图片_20220108230901.png


⑩④. BeanDefinitionReader利用dom解析把xml成Document文档对象,然后再把Document文档对象再交给BeanDefinitionDocumentReader


微信图片_20220108230917.png


微信图片_20220108230921.png


⑩⑤. 继续跟踪堆栈–下图所示,这是以下步骤的堆栈,就不一一带着来研究堆栈的细节了:然后BeanDefinitionDocumentReader再负责把Document文档对象交给BeanDefinitionParserDelegate(Bean定义解析器委托)


微信图片_20220108230940.png


⑩⑥. 最终BeanDefinitionParserDelegate(Bean定义解析器委托)把Document文档对象解析成BeanDefinition,这里面也就利用了解释器模式

xml的所有信息解析完的信息并封装在了BeanDefinitionHolder(bean定义信息的持有)中


public class BeanDefinitionHolder implements BeanMetadataElement {
  private final BeanDefinition beanDefinition;
  private final String beanName;
}


⑩⑦. beanDefinition和beanname这两个玩意要注册到档案馆里面,它就为了方便,就先封装到了这个BeanDefinitionHolder(bean定义信息的持有)


⑩⑧. 然后就再注册这个玩意,直接拿到BeanDefinitionRegistry(bean定义信息的注册中心),给这个注册中心里面利用registerBeanDefinition这个方法进行注册,那它如何注册的?


在DefaultListableBeanFactory对信息进行校验,验证成功以后,再来看这个beanDefinitionMap.get (beanName);里面有没有这个bean的名字


Spring的底层大量使用到了这样的写法,想要给容器里面注册一个定义信息,但是先上来检查beanDefinitionMap里面有没有,没有才进行注册


也就是说现在是逐行解析,解析到每一个bean,解析成了以后,就要把它注册到档案馆


(DefaultListableBeanFactory)里面,然后先检查档案馆(beanDefinitionMap)里面有没有


如果没有就注册进去,如果有就不用注册了,至此就把整个注册流程就了解清楚了




相关文章
|
2天前
|
Java 应用服务中间件 Nacos
Spring Cloud 常用各个组件详解及实现原理(附加源码+实现逻辑图)
Spring Cloud 常用各个组件详解及实现原理(附加源码+实现逻辑图)
17 0
|
9月前
|
XML Java 数据格式
Spring 核心类 ConfigurationClassPostProcessor 流程讲解及源码全面分析(二)
Spring 核心类 ConfigurationClassPostProcessor 流程讲解及源码全面分析(二)
51 0
|
8月前
|
人工智能 Java
SpringBoot实战(十):统一异常处理
SpringBoot实战(十):统一异常处理
|
9月前
|
缓存 Java Spring
Spring 核心方法 refresh 刷新流程简要概述及相关源码扩展实现(二)(下)
Spring 核心方法 refresh 刷新流程简要概述及相关源码扩展实现(二)(下)
60 0
|
9月前
|
存储 XML 前端开发
Spring 核心方法 refresh 刷新流程简要概述及相关源码扩展实现(二)(上)
Spring 核心方法 refresh 刷新流程简要概述及相关源码扩展实现(二)
43 0
|
9月前
|
XML 存储 Java
Spring 核心方法 refresh 刷新流程简要概述及相关源码扩展实现(一)(上)
Spring 核心方法 refresh 刷新流程简要概述及相关源码扩展实现(一)
64 0
|
9月前
|
存储 XML 缓存
Spring 核心方法 refresh 刷新流程简要概述及相关源码扩展实现(一)(下)
Spring 核心方法 refresh 刷新流程简要概述及相关源码扩展实现(一)
51 0
|
9月前
|
XML 缓存 Java
Spring 核心类 ConfigurationClassPostProcessor 流程讲解及源码全面分析(三)
Spring 核心类 ConfigurationClassPostProcessor 流程讲解及源码全面分析(三)
66 0
|
9月前
|
XML Java 数据格式
Spring 核心类 ConfigurationClassPostProcessor 流程讲解及源码全面分析(一)
Spring 核心类 ConfigurationClassPostProcessor 流程讲解及源码全面分析
74 0
|
XML 开发框架 监控
SpringBoot快速搭建、自动流程进阶、装配机制、功能扩展点详解
Spring Boot启动 Spring Boot是Spring旗下的一个子项目,其设计目的是简化Spring应用的初始搭建及开发过程,Spring Boot可以快速启动和运行你的Spring应用服务。 Spring Boot概述 Spring Boot本质上是基于Spring内核的一个快速开发框架,是“约定优先于配置”理念下的最佳实践,通过解析Spring Boot的启动过程,可以帮助我们逐渐了解它的工作机制和其背后整合Spring快速开发的实现原理。
387 0
SpringBoot快速搭建、自动流程进阶、装配机制、功能扩展点详解