IoC(Inversion of Control),即所谓的控制反转,就是应用本身不负责依赖对象的创建及维护, 依赖对象的创建及维护是由外部容器(BeanFactory)负责的。
Spring通过配置文件(或者注解、JavaConfig)描述Bean和Bean之间的依赖关系,利用反射机制实例化Bean并建立Bean之间的依赖关系。Spring的IoC容器在完成这些底层工作的同时,还提供了Bean实例缓存、生命周期管理、Bean实例代理、事件发布、资源装载等高级服务。
Spring IoC容器有两个核心接口:BeanFactory和 ApplicationContext。当系统创建Spring IoC容器时,默认会预初始化所有的singleton Bean。也就是说,当IoC容器初始化完成后,容器中所有singleton Bean也实例化完成,这就意味着:系统前期创建IoC容器时将有较大的系统开销,但一旦容器初始化完成,程序后面获取singleton Bean实例时将拥有较好的性能。
BeanFactory
BeanFactory提供了IoC的基本功能,其默认实现是XmlBeanFactory。
ApplicationContext
ApplicationContext是BeanFactory的子接口。BeanFactory提供基础的IoC功能,ApplicationContext除了支持BeanFactory的全部功能外,提供了更多企业级开发的特性:
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
WebApplicationContext是ApplicaitonContext的子接口,提供了Spring IoC对Web应用的支持。