Spring笔记03-Spring解析默认标签

    Spring解析默认标签的流程概括来讲就是,将root下的element节点转换成beanDefinition,然后将beanName和beanDefiniton放到beanDefinitionMap里(这里的

beanDefinitionMap是一个ConcurrentHashMap实例,它存放在DefaultListableBeanFactory里)。

    具体流程是这样的:我们从函数doRegisterBeanDefinitions(root)进来,从根到叶子迭代地处理每个元素,如果元素里的标签是beans,就调用doRegisterBeanDefiniton(ele)处理,如果元素里的标签是bean,就调用processBeanDefinition(ele,delegate)处理。

doRegisterBeanDefiniton(root) -> 

parseBeanDefinitons(root,delegate) -> 

parseDefaultElement(ele,delegate) -> case1:标签是beans -> doRegisterBeanDefinition(ele) ->

                                                        -> case2:标签是bean -> processBeanDefinition(ele,delegate) ->


这里root元素的标签也是beans,每个beans标签都对应一个BeanDefinitionParserDelegate实例和一个doRegisterBeanDefinition方法。

    跳出迭代后,主要就是标签bean的解析。processBeanDefinition(ele,delegate)是解析bean标签的函数,主要做了两件事:

        (1).通过delegate.parseBeanDefinitonElement(ele)解析元素生成BeanDefinitionHolder实例bdHolder;

        (2).注册bdHolder,也就是将beanName和beanDefinition写入beanDefinitionMap;

    bdHolder包含beanName,beanDefinition,aliasesArray。一般情况下beanName就是<bean>...</bean>里的id;如果id没有值,那beanName就是aliases里的第一个;如果aliases也没有值,那beanName就是bean对应的类的类名。beanDefinition是这里的核心。获得这个beanDefinition的方法是beanDefinitionParserDelegate.parseBeanDefinitonElement(ele,beanName,null)。

    







发布了51 篇原创文章 · 获赞 22 · 访问量 14万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章