(备注:上面说起的 FileSystemResource 以及 BeanDefinition若有不清楚,请阅读我上一篇文章:spring源码之IOC容器资源定位过程)面试
资源定位完成并获取到对应的资源解析条件后,spring将会对获取到的资源进行解析,而且将解析后的抽象数据结构注册到IoC容器中。
spring
那咱们接下来就来看看spring 对 :数据结构
BeanDefinition的载入
学习
BeanDefinition的注册3d
这两步的处理过程在复杂的容器继承层级中的处理过程是怎么样的呢?下面咱们就来简单讲讲cdn
在资源定位成功后,经过实现原理的分析,咱们能够看到,在初始化FileSystemXmlApplicationContext的过程当中,是经过XmlBeanDefinitionReader来读取资源的,并委托它来完成具体的载入以及解析过程,因为咱们这里使用的是XML方式定义的资源文件,因此须要使用XmlBeanDefinitionReader,若是使用了其余的BeanDefinition,就须要用其余种类的BeanDefinitionReader来完成数据的载入工做了。xml
对于BeanDefinition的载入和解析工做的开始是从AbstractXmlApplicationContext类中的loadBeanDefinitions方法中调用的reader的loadBeanDefinitions方法开始的。接下来的调用流程我仍是和之前同样整理成了一个调用的流程图,并在各个调用节点备注了调用方法的做用,能够根据这个流程图到源码环境细看状况,同时这个流程也梳理出了一个比较清晰的思路,便于理解。(能够保存到手机哦。说不定面试会用到)以下图:对象
通过解析,咱们在xml文件定义的配置文件被解析成一个抽象的数据结构BeanDefinition数据结构,经过AbstractBeanDefinition为入口,让Ioc容器执行索引、查询和操做。Ioc容器大体完成了管理Bean的数据准备工做,可是这个时候依赖注入实际上还没发生,在此时容器也并无彻底起做用,如今BeanDefinition中的只是一些静态的配置信息,要想彻底发挥容器的做用,还须要完成对数据想容器中注册。blog
这个注册为Ioc容器提供了更好的使用方式,能够在DefaultListableBeanFactory类中看到,容器实际上是用ConcurrentHashMap来持有BeanDefinition的,同时容器对这些信息进行处理和维护。继承
此篇文章和上篇文章(spring源码之IOC容器资源定位过程)就是我阅读spring Ioc容器对资源定位o,加载和注册的整调用流程的记录。很明显这两篇文章只是讲了大概的思路,具体的内容还须要具体在搭建源码环境后阅读。
确定会有同窗说,咦~,IoC容器的一些比较厉害的特性你咋没写处理呢?
对于依赖注入、aop实现、事务特性,若是在同一篇文章写,可能会显得思路不是很清晰,因此后面我会一一出个人记录笔记,预知下文,能够关注小弟的公众号一块儿同探讨学习哈。
看完文章啦?听首歌吧~(我还年轻我还年轻),不要忘记关注哦~
公众号只作学习、记录和交流,偶尔推推一些笔者以为比较好听的歌---- rofeya