IoC(Inversion of Control),即所謂的控制反轉,就是應用自己不負責依賴對象的建立及維護, 依賴對象的建立及維護是由外部容器(BeanFactory)負責的。web
Spring經過配置文件(或者註解、JavaConfig)描述Bean和Bean之間的依賴關係,利用反射機制實例化Bean並創建Bean之間的依賴關係。Spring的IoC容器在完成這些底層工做的同時,還提供了Bean實例緩存、生命週期管理、Bean實例代理、事件發佈、資源裝載等高級服務。 緩存
Spring IoC容器有兩個核心接口:BeanFactory和 ApplicationContext。當系統建立Spring IoC容器時,默認會預初始化全部的singleton Bean。也就是說,當IoC容器初始化完成後,容器中全部singleton Bean也實例化完成,這就意味着:系統前期建立IoC容器時將有較大的系統開銷,但一旦容器初始化完成,程序後面獲取singleton Bean實例時將擁有較好的性能。app
BeanFactory提供了IoC的基本功能,其默認實現是XmlBeanFactory。性能
ApplicationContext是BeanFactory的子接口。BeanFactory提供基礎的IoC功能,ApplicationContext除了支持BeanFactory的所有功能外,提供了更多企業級開發的特性:spa
ApplicationContext繼承MessageSource接口,所以提供國際化支持。代理
資源訪問。對象
事件機制。 繼承
ApplicationContext有如下幾種實現:
接口
AnnotationConfigApplicationContext—Loads a Spring application context from one or more Java-based configuration classes生命週期
AnnotationConfigWebApplicationContext—Loads a Spring web application context from one or more Java-based configuration classes
ClassPathXmlApplicationContext—Loads a context definition from one or more XML files located in the classpath, treating context-definition files as classpath resources
FileSystemXmlApplicationContext—Loads a context definition from one or more XML files in the filesystem
XmlWebApplicationContext—Loads context definitions from one or more XML files contained in a web application
WebApplicationContext是ApplicaitonContext的子接口,提供了Spring IoC對Web應用的支持。