Spring IOC 之解析 bean 標籤:解析自定義標籤

processBeanDefinition() 負責 Bean 標籤的解析java

  • 在解析過程當中首先調用 BeanDefinitionParserDelegate.parseBeanDefinitionElement() 完成默認標籤的解析
  • 若是解析成功(返回的 bdHolder != null ),則首先調用 BeanDefinitionParserDelegate.decorateBeanDefinitionIfRequired() 完成自定義標籤元素解析
public BeanDefinitionHolder decorateBeanDefinitionIfRequired(Element ele, BeanDefinitionHolder definitionHolder) {
		return decorateBeanDefinitionIfRequired(ele, definitionHolder, null);
	}

調用 decorateBeanDefinitionIfRequired() :ui

  • 遍歷節點(子節點),調用 decorateIfRequired() 裝飾節點(子節點)
    • 首先獲取自定義標籤的命名空間,若是不是默認的命名空間則根據該命名空間獲取相應的處理器
    • 最後調用處理器的 decorate() 進行裝飾處理

Bean 的解析過程已經所有完成了,下面作一個簡要的總結:code

  • 解析 BeanDefinition 的入口在 DefaultBeanDefinitionDocumentReader.parseBeanDefinitions()
    • 該方法會根據命令空間來判斷標籤是默認標籤仍是自定義標籤
      • 其中默認標籤由 parseDefaultElement() 實現
      • 自定義標籤由 parseCustomElement() 實現
    • 在默認標籤解析中,會根據標籤名稱的不一樣進行 import 、alias 、bean 、beans 四大標籤進行處理,其中 bean 標籤的解析爲核心,它由 processBeanDefinition() 方法實現
      • processBeanDefinition() 開始進入解析核心工做,分爲三步:
        • 解析默認標籤:BeanDefinitionParserDelegate.parseBeanDefinitionElement()
        • 解析默認標籤下的自定義標籤:BeanDefinitionParserDelegate.decorateBeanDefinitionIfRequired()
        • 註冊解析的 BeanDefinition:BeanDefinitionReaderUtils.registerBeanDefinition
           
      • 核心工做由 parseBeanDefinitionElement() 方法實現,該方法會依次解析 Bean 標籤的屬性、各個子元素,解析完成後返回一個 GenericBeanDefinition 實例對象
相關文章
相關標籤/搜索