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应用的支持。