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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章