Spring IOC 之 註冊 BeanDefinition

獲取 Document 對象後,會根據該對象和 Resource 資源對象調用 registerBeanDefinitions() 方法,開始註冊 BeanDefinitionsspring

  • 首先調用 createBeanDefinitionDocumentReader() 方法實例化 BeanDefinitionDocumentReader 對象
  • 而後獲取統計前 BeanDefinition 的個數
  • 最後調用 registerBeanDefinitions() 註冊 BeanDefinition

  • 註冊 BeanDefinition 的方法 registerBeanDefinitions() 是在接口 BeanDefinitionDocumentReader 中定義

  • 從給定的 Document 對象中解析定義的 BeanDefinition 並將他們註冊到註冊表中
  • 方法接收兩個參數,待解析的 Document 對象,以及解析器的當前上下文,包括目標註冊表和被解析的資源

DefaultBeanDefinitionDocumentReader post

調用 doRegisterBeanDefinitions() 開啓註冊 BeanDefinition 之旅測試

  • 程序首先處理 profile屬性,profile主要用於咱們切換環境,好比切換開發、測試、生產環境,很是方便
  • 而後調用 parseBeanDefinitions() 進行解析動做,不過在該方法以前以後分別調用 preProcessXml() 和 postProcessXml() 方法來進行前、後處理,目前這兩個方法都是空實現,交由子類來實現

parseBeanDefinitions()3d

  • 最終解析動做落地在兩個方法處:parseDefaultElement(ele, delegate) 和 delegate.parseCustomElement(root)

咱們知道在 Spring 有兩種 Bean 聲明方式:code

  • 配置文件式聲明:<bean id="studentService" class="org.springframework.core.StudentService"/>
  • 自定義註解方式:<tx:annotation-driven>
    • 兩種方式的讀取和解析都存在較大的差別,因此採用不一樣的解析方法,若是根節點或者子節點採用默認命名空間的話,則調用 parseDefaultElement() 進行解析,不然調用 delegate.parseCustomElement() 方法進行自定義解析
相關文章
相關標籤/搜索