## IoC 容器
Spring 容器是 Spring 框架的核心。容器將創建對象,把它們連接在一起,配置它們,并管理他們的整個生命周期從創建到銷毀。Spring 容器使用依賴注入(DI)來管理組成一個應用程序的組件。這些對象被稱為 Spring Beans,我們將在下一章中進行討論。
通過閱讀配置元數據提供的指令,容器知道對哪些對象進行實例化,配置和組裝。配置元數據可以通過 XML,Java 注釋或 Java 代碼來表示。下圖是 Spring 如何工作的高級視圖。 Spring IoC 容器利用 Java 的 POJO 類和配置元數據來生成完全配置和可執行的系統或應用程序。
**IOC 容器**具有依賴注入功能的容器,它可以創建對象,IOC 容器負責實例化、定位、配置應用程序中的對象及建立這些對象間的依賴。通常new一個實例,控制權由程序員控制,而"控制反轉"是指new實例工作不由程序員來做而是交給Spring容器來做。在Spring中BeanFactory是IOC容器的實際代表者。
------------------------------------------------------------------
Spring 提供了以下兩種不同類型的容器。
| 序號 | 容器 & 描述 |
| --- | --- |
| 1 | Spring BeanFactory 容器它是最簡單的容器,給 DI 提供了基本的支持,它用 org.springframework.beans.factory.BeanFactory 接口來定義。BeanFactory 或者相關的接口,如 BeanFactoryAware,InitializingBean,DisposableBean,在 Spring 中仍然存在具有大量的與 Spring 整合的第三方框架的反向兼容性的目的。|
| 2 | Spring ApplicationContext 容器 該容器添加了更多的企業特定的功能,例如從一個屬性文件中解析文本信息的能力,發布應用程序事件給感興趣的事件監聽器的能力。該容器是由 org.springframework.context.ApplicationContext 接口定義。|
ApplicationContext 容器包括 BeanFactory 容器的所有功能,所以通常不建議使用BeanFactory。BeanFactory 仍然可以用于輕量級的應用程序,如移動設備或基于 applet 的應用程序,其中它的數據量和速度是顯著。