【轉】Spring學習---SpringIOC容器的初始化過程

來源:互聯網
上載者:User

標籤:方便   資料結構   自己   比較   注意   --   一個   springioc   控制   

【原文】https://www.toutiao.com/i6594400249429623304/

SpringIOC容器的初始化過程

簡單來說,IoC容器的初始化是由refresh()方法來啟動的,這個方法標誌著IoC容器的正式啟動。

具體來說,這個啟動包括BeanDefinition的

Resouce定位、載入和註冊三個基本過程。

如果我們瞭解如何編程式地使用IoC容器,就可以清楚地看到Resource定位和載入過程的介面調用。在下面的內容裡,我們將會詳細分析這三個過程的實現。在分析之前,要提醒讀者注意的是,Spring把這三個過程分開,並使用不同的模組來完成,如使用相應的ResourceLoader、BeanDefinitionReader等模組,通過這樣的設計方式,可以讓使用者更加靈活地對這三個過程進行剪裁或擴充,定義出最適合自己的IoC容器的初始化過程。

第一個過程是Resource定位過程。這個Resource定位指的是BeanDefinition的資源定位,它由ResourceLoader通過統一的Resource介面來完成,這個Resource對各種形式的BeanDefinition的使用都提供了統一介面。對於這些BeanDefinition的存在形式,相信大家都不會感到陌生。比如,在檔案系統中的Bean定義資訊可以使用FileSystemResource來進行抽象;在類路徑中的Bean定義資訊可以使用前面提到的ClassPathResource來使用,等等。這個定位過程類似於容器尋找資料的過程,就像用水桶裝水先要把水找到一樣。

第二個過程是BeanDefinition的載入。這個載入過程是把使用者定義好的Bean表示成IoC容器內部的資料結構,而這個容器內部的資料結構就是BeanDefinition。下面介紹這個資料結構的詳細定義。具體來說,這個BeanDefinition實際上就是POJO對象在IoC容器中的抽象,通過這個BeanDefinition定義的資料結構,使IoC容器能夠方便地對POJO對象也就是Bean進行管理。在下面的章節中,我們會對這個載入的過程進行詳細的分析,使大家對整個過程有比較清楚的瞭解。

第三個過程是向IoC容器註冊這些BeanDefinition的過程。這個過程是通過調用BeanDefinitionRegistry介面的實現來完成的。這個註冊過程把載入過程中解析得到的BeanDefinition向IoC容器進行註冊。通過分析,我們可以看到,在IoC容器內部將BeanDefinition注入到一個HashMap中去,IoC容器就是通過這個HashMap來持有這些BeanDefinition資料的。值得注意的是,這裡談的是IoC容器初始化過程,在這個過程中,一般不包含Bean依賴注入的實現。在Spring IoC的設計中,Bean定義的載入和依賴注入是兩個獨立的過程。依賴注入一般發生在應用第一次通過getBean向容器索取Bean的時候。但有一個例外值得注意,在使用IoC容器時有一個預執行個體化的配置,通過這個預執行個體化的配置(具體來說,可以通過為Bean定義資訊中的lazyinit屬性),使用者可以對容器初始化過程作一個微小的控制,從而改變這個被設定了lazyinit屬性的Bean的依賴注入過程。

舉例來說,如果我們對某個Bean設定了lazyinit屬性,那麼這個Bean的依賴注入在IoC容器初始化時就預先完成了,而不需要等到整個初始化完成以後,第一次使用getBean時才會觸發。

瞭解了IoC容器進行初始化的大致輪廓之後,下面我們詳細地介紹在IoC容器的初始化過程中,BeanDefinition的資源定位、載入和解析過程是怎麼實現的。

【轉】Spring學習---SpringIOC容器的初始化過程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.