Spring IOC源碼初探(一)

Spring提供了兩個(gè)基本功能:IOC和AOP,基于此形成了Spring的生態(tài)環(huán)境,其中IOC又是整個(gè)Spring生態(tài)的基礎(chǔ),也就是IOC是Spring最核心的功能。

Spring IOC即反向控制,也可以叫依賴注入,把bean(組件)的初始化工作交給IOC容器,而不是在程序中完成,這就將組件的初始化和組件真正的核心功能相隔離,做到了解耦;另外,Spring IOC提倡面向接口編程,同樣是為了解耦。Spring幫助我們使軟件的結(jié)構(gòu)符合,開閉原則(對修改封閉,對擴(kuò)展開發(fā):不需要修改代碼來增加新的功能),是解耦組件依賴關(guān)系的利器。

下面我們通過對Spring IOC機(jī)制源碼的學(xué)習(xí),更好的理解Spring的IOC功能。

將從組成和行為兩個(gè)角度來粗略分析Spring IOC容器,本文注意基于Spring IOC容器的組成來分析。

Spring容器主要指BeanFactory或者ApplicationContext,而我們常用的是后者。

Spring的容器的繼承關(guān)系圖

由此圖,我們可以看到Spring容器繼承關(guān)系的一個(gè)結(jié)構(gòu)圖。核心接口就是BeanFactory,它提供了容器的基本方法getBean以獲得容器內(nèi)的組件,HierarchicalBeanFactory,ListableBeanFactory,AutowireCapableBeanFactory三個(gè)接口分別繼承自BeanFactory,并對BeanFactory的功能做了擴(kuò)展。HierarchicalBeanFactory提供了父子容器的功能,ListableBeanFactory提供了容器內(nèi)Bean的列表操作功能,AutowireCapableBeanFactory則提供了Bean的自動(dòng)裝配功能;ConfigurableBeanFactory則提供了BeanFactory的一些配置功能;這就是BeanFactory接口層次關(guān)系圖,XmlBeanFactory是一個(gè)常見的BeanFactory實(shí)現(xiàn)它就實(shí)現(xiàn)了上述接口以提供完整的容器功能,同樣依照此接口層次實(shí)現(xiàn)也可以達(dá)到解耦、職責(zé)清晰的目的。

ApplicationContext同樣擁有BeanFactory的上述能力,所以它繼承了BeanFactory體系的大部分接口,上圖中有一點(diǎn)是不準(zhǔn)確的,ApplicationContext并未繼承AutowireCapableBeanFactory,它的實(shí)現(xiàn)類是通過持有BeanFactory實(shí)例來擁有自動(dòng)裝配的功能(它不對外暴露自動(dòng)裝配功能),特別地,ApplicationContext實(shí)現(xiàn)了MessageSource、ResourceLoader、ApplicationEventPublisher三個(gè)接口,以擁有對國際化、加載資源、事件機(jī)制的支持。

常見的BeanFactory實(shí)現(xiàn)有XmlBeanFactory,DefaultListableBeanFactory,前者繼承自后者,而后者也是Spring中BeanFactory默認(rèn)的全功能實(shí)現(xiàn),ApplicationContext也是通過持有它而實(shí)現(xiàn)。
DefaultListableBeanFactory的使用需要我們?nèi)ゼ虞d特定的配置資源,并配置解析器去解析,XmlBeanFactory只要求我們?nèi)ゼ虞d需要的Xml配置資源。

我們在項(xiàng)目中更推薦使用ApplicationContext,它的實(shí)現(xiàn)類常見的有WebApplicationContext等,它除了幫助我們實(shí)現(xiàn)了資源加載功能外,還提供了上述的高級功能。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容