容器,從字面角度很容易理解,就是用來貯藏東西的。從計算機的角度,可粗略地分為Web容器和編程容器。
Web容器是應用服務器中位於組件和平台之間的接口集合。如WebLogic、Tomcat等。
編程容器容器是用來存儲和組織其他對象的對象。如Java內部容器類(Map、List等)。
容器可以管理對象的生命周期、對象與對象之間的依賴關系,您可以使用一個配置文件(通常是XML),在上面定義好對象的名稱、如何產生(Prototype 方式或Singleton 方式)、哪個對象產生之后必須設定成為某個對象的屬性等,在啟動容器之后,所有的對象都可以直接取用,不用編寫任何一行程序代碼來產生對象,或是建立對象與對象之間的依賴關系。這也正是使用Spring框架給我們帶來的好處。
BeanFacotry是spring中比較原始的Factory。它無法支持spring的許多插件,如AOP功能、Web應用等。 ApplicationContext接口,它由BeanFactory接口派生而來,因而提供BeanFactory所有的功能。
ApplicationContext以一種更向面向框架的方式工作以及對上下文進行分層和實現繼承,
ApplicationContext包還提供了以下的功能:
• MessageSource, 提供國際化的消息訪問
• 資源訪問,如URL和文件
• 事件傳播
• 載入多個(有繼承關系)上下文 ,使得每一個上下文都專注於一個特定的層次,比如應用的 web層
BeanFactroy采用的是延遲加載形式來注入Bean的,即只有在使用到某個Bean時(調用getBean()),才對該Bean進行加載實例化,這樣,我們就不能發現一些存在的Spring的配置問題。
而ApplicationContext則相反,它是在容器啟動時,一次性創建了所有的Bean。這樣,在容器啟動時,我們就可以發現Spring中存在的配置錯誤。
如何選擇使用容器?
ApplicationContext包含BeanFactory的所有功能,幾乎所有的應用系統都選擇ApplicationContext而不是BeanFactory。
只有在資源很少的情況下,才會考慮采用BeanFactory,如在移動設備上等。