BeanFactory是Spring框架最核心的接口,它提供了高級IoC的配置機制。BeanFactory使管理不同類型的Java對象稱爲可能。
ApplicationContext建立在BeanFactory基礎之上,提供更多面嚮應用的功能,它提供了國際化支持和框架事件體系,更易於創建實際應用。
我們一般稱BeanFactory爲IoC容器,而稱ApplicationContext爲應用上下文。但有時爲了行爲方便,我們也將ApplicationContext稱爲Spring容器。
對於兩者的用途,我們可以進行簡單劃分:BeanFactory是Spring框架的基礎設施,面向Spring本身;ApplicationContext面向使用Spring框架的開發者,幾乎所有的應用場合我們都直接使用ApplicationContext而非底層的BeanFactory。
愚見:ApplicationContext間接BeanFactory,最大的區別是BeanFactory初始化時不會去實例化XML配置文件裏的bean,只有被調用是纔會去實例化該bean,對於singleton的bean來說,BeanFactory會緩存該實例。ApplicationContext在初始化時,會先實例化singleton的bean(spring的bean是否單例由scope屬性或singleton屬性決定,默認爲singleton,即單例,注意,是在該IOC容器內單例,classloader就不一樣了),當然可以通過XML配置文件中bean標籤的lazy-init屬性來指定該bean是否需要延遲加載,但有種特殊情況是,非懶加載的bean依賴與懶加載的bean是,懶加載功能就失效了。在web開發中,通常實用ApplicationContext來作爲容器,特別是WebApplicationContext
如有錯誤,請指正!