beanFactory和ApplicationContext的區(qū)別
beanFactory和ApplicationContext的區(qū)別,可以說是面試??嫉膯栴}。理解兩者的區(qū)別,對于我們學(xué)習(xí)spring源碼也有很大的幫助。我們常說的ioc容器是啥?其實就是BeanFactory,我們存放所有單例bean的容器都在BeanFactory內(nèi)部,包過doGetBean等方法。那ApplicationContext是啥?他是面向企業(yè)級的開發(fā),包裝的更靈活的一個方案。讓我們先看看關(guān)系圖


我們可以看到ApplicationContext實現(xiàn)了BeanFactory,說明它能提供和BeanFactory一樣的功能。并且很有意思的一點是,他提供BeanFactory能力的時候,采用的是組合代理的方式,內(nèi)部有個屬性為BeanFactory,所有的接口都指派給它去完成


這樣組合的方式能讓層級看起來不那么深,更加清晰易懂。那么ApplicationContext還擴展了哪些功能?特性:
Bean instantiation/wiring
Bean 的實例化/串聯(lián)
自動的 BeanPostProcessor 注冊
自動的 BeanFactoryPostProcessor 注冊
方便的 MessageSource 國際化訪問(i18n)
ApplicationEvent 的發(fā)布
與 BeanFactory 懶加載的方式不同,它是預(yù)加載,所以,每一個 bean 都在 ApplicationContext 啟動之后實例化
標(biāo)簽: