天天看點

Spring源碼解析——從XmlBeanFactory的構造函數開始看LoadBeanDefinitions

        之前的文章聊過ClassPathResource類,通過這個類,我們從classpath加載到了我們的spring配置檔案,之後,就開始執行XmlBeanFactory的構造過程了:

     先看我們的super方法:

   ignoreDependencyInterface的主要功能是忽略給定接口的自動裝配功能。

   方法原型:

   這貨其實是個set:

     例如,我這裡加入了BeanNameAware.class,BeanFactoryAware.class,BeanClassLoaderAware.class,如果對于A中有屬性B的情況,當我們擷取A的時候,如果B沒有被初始化,則會預設初始化B,但是,比如B實作了上述三個接口中任意一個,就會不去自動注入B,轉而使用其他方式對B進行注入。

      追溯完super方法,回到XmlBeanFactory構造函數中,   執行 this.reader.loadBeanDefinitions(resource); 這句話是整個資源加載的切入點。

    在loadBeanDefinitions方法中,會調用自身構造函數,對傳入的Resource進行封裝:

   通過兩個成員變量encoding跟charset來看,發現隻是為我們的Resource類包裝了編碼的東西。

   接着正式進入loadBeanDefinitions方法:

之後進入到doLoadBeanDefinitions方法:

    代碼沒兩行,倒是異常挺多,估計這裡轉換Document對象時候,也預設包含對文檔格式的一些驗證。

     上午先到這裡!