spring源码之IOC容器资源载入和注册

铺垫

       从上一篇文章咱们已经了解到了spring IoC容器的在初始化容器时,对初始化资源的定位过程,即以FileSystem方式存在的Resource的定位问题,在BeanDefinition资源定位完成的基础上,就能够经过返回的Resource对象来进行BeanDefinition的载入了,在定位完成之后,为后面的BeanDefinition的载入创造了I/O操做的条件。就至关于咱们须要用一个桶去装水,水源的位置已经肯定了

(备注:上面说起的 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

相关文章
相关标签/搜索