spring源码学习(三)解析和注册BeanDefinition(上)

spring通过registerBeanDefinitions来解析和注册BeanDefinition。下图是其中的源码,位于XmlDefinitionsReader类中
registerBeanDefinitions

1.先实例化了BeanDefinitionDocumentReader对象
在实例化BeanDefinitionReader对象的时候,会把DefinitionRegistry传入,默认使用的使用的是DefaultListableBeanFactoryde的子类,然后在这getRegistry取到的就是这个Registry,然后调用getBeanDefinitionCount方法来获取当前BeanDefinition的加载个数
传入对象

继续往下点可以看到AbstractBeanDefinitionReader构造函数里传入registy 的语句
传入的this就是xmlBeanFactory 是DefaultListableBeanFactoryde的子类
传入对象
然后这里this.regiesty=registy 就是传入的语句

2.registerBeanDefinitions方法是用来加载和注册Bean的主要方法
进入registerBeanDefinitions函数
registerBeanDefinitions
里面的doRegisterBeanDefinitions函数才是真正开始注册bean的核心工作,之前的各种处理只是为注册bean做了准备工作,把xml文档转换成此函数可以接受的数据类型。
doRegisterBeanDefinitions
函数先备份了this.delegate,然后开始使用新建的BeanDefinitionParserDelegate开始解析root,一开始判断root的namespaceUri是否等于http://www.springframework.org/schema/beans,是的话看是否有profile属性,没有则继续解析,有的话则看是否为activeProfiles,如果是则setActiveProfiles,源码自行查看,主要功能是为了让spring有多套环境配置,在不同场景使用不同的配置环境,比如开发环境和生产环境。
preProcessXml(root);和postProcessXml(root);是两段空函数,是设计模式中的模板模式,以后继承他的类重写两个函数后,方法可以按照现有的逻辑执行。

parseBeanDefinitions是继续解析root的主要函数,parseBeanDefinitions函数里判断若root的namespaceUri等于http://www.springframework.org/schema/beans,用parseDefaultElement解析,否则用parseCustomElement解析。
parseBeanDefinitions

3.最后返回的是本此加载的BeanDefinition的个数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值