SpringIOC——初始化——解析

IOC初始化过程

解析


涉及接口


在这里插入图片描述

上一章,我们知道了SpringIOC的容器启动前对resource(配置信息)的定位过程,在最后loadBeanDefinitions(resource)中由

XmlBeanDefinitionReader 打开Resource I/O流,从而获得XML的文件对象,进行真正的XML解析来获得Document对象,代码如下:

在这里插入图片描述


doLoadBeanDefinitions方法中doLoadDocument进行第一层解析。将I/O中的数据解析成Document文档,

这个过程交给了DefaultDocumentLoader来处理,
在这里插入图片描述
其中通过JDK的

javax.xml.parsers.DocumentBuilderFactory构建了

DocumentBuilder来解析
在这里插入图片描述

解析好Document文档后,registerBeanDefinitions(doc,resource)启动对BeanDefinition解析的详细过程,这个解析就会依照Bean配置规则去解析,也是我们下面详细记录的内容

这个工作是交给BeanDefinitionDocumentReader来完成的

在这里插入图片描述

registerBeanDefinitions调用实际处理方法doRegisterBeanDefinitions(Element root)

在这里插入图片描述

通过对Document文档树的内容进行处理,将结果交由BeanDefinitionHolder对象来持有,BeanDefinitionHolder除了持有BeanDefinition对象外,还持有其他与该BeanDefinition的使用相关的信息,比如Bean的名字、别名集合等。具体在processBeanDefinition方法中实现。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里会看到对那些熟系的BeanDefinition定义的处理,比如id、name、aliase\d等属元素,把这些元素的值从XML中读取出来以后,设置到生成的BeanDefinitionHolder中去,对于其他元素配置的解析,比如各种Bean的属性配置,通过一个较为复杂的解析过程,这个过程由parseBeanDefinitionElement来完成的,解析完成后,会把解析结果放到BeanDefinition对象中并设置到BeanDefinitionHolder中去。

进入parseBeanDefinitionElement

在这里插入图片描述
在这里插入图片描述

上面是具体生成BeanDefinition的地方,在这里,我们看一看对property进行的解析
在这里插入图片描述

在这里插入图片描述

  • 这里取得property元素的值,也许是一个list或其他
    */
    @Nullable
    public Object parsePropertyValue(Element ele, BeanDefinition bd, @Nullable String propertyName)

在这里插入图片描述

这里是对property子元素的解析过程,Array,List,Set,Map,prop等各种元素都会在这里进行解析,生成对应的数据对象,比如ManagedList,ManagedArray,ManagedSet等,这些Managed类是spring对具体的BeanDefinition的数据封装。可以去查看自己感兴趣的部分,具体的解析方法在BeanDefinitionParserDelegate类中都能找到。

经过逐层的解析,我们在XML文件中定义的BeanDefinition就被整个载入到IOC容器中,并在容器中建立了数据映射。在ioc容器中建立了对应的数据结构,这些数据结构可以以AbstractBeanDefinition为入口,让IOC直行索引、查询和操作。经过以上的载入过程。IOC容器大致完成了管理Bean对象的数据准备工作,或者说是初始化过程,但是,重要的依赖注入实际上还没有发生,现在IOC容器BeanDefinition中存在的还只是一些静态配置信息,还没有完全起作用,要完全发挥容器的作用,还需要完成数据向容器的注册,将在下一章记录。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值