Spring容器负责对象的创建、装配、销毁的整个生命周期管理;关于Spring容器我们最常听闻的一个术语就是IOC容器,所谓的IOC,是一种叫做控制反转的思想;通俗的来说,我在应用程序之中就不在过问对象的创建和管理对象之间的依赖关系了,都让IOC容器帮我代劳了,也就是说,我把对象创建、管理的控制权都交给Spring容器,这是一种控制权的反转,所以Spring容器才能被称为IOC容器。不过我们也要清楚一点,并不是只有Spring容器才叫做IOC容器,IOC只是一种编程思想,只要是基于这种思想的容器都可以叫做IOC容器。

上面我们了解了容器的概念,容器只是给我们提供了一个管理对象的空间,那么我们如何将一个对象放入到容器中帮我们管理呢?这就涉及到Spring的应用上下文了。什么是应用上下文呢?应用上下文其实就是Spring IOC容器在代码层面的实现,而我们常见的ApplicationContext本质上说就是一个维护Bean定义以及对象之间协作关系的高级接口。Spring的核心是容器,而容器并不唯一,Spring框架本身就提供了很多个容器的实现,大概分为两种类型:一种是不太常用的BeanFactory,这是最简单的容器,只能提供基本的DI功能;第二种就是集成BeanFactory后派生而来的应用上下文,其抽象接口也就是我们上面提到的ApplicationContext,他能提供更多的服务,如下:

  • AnnotationConfigApplicationContext:从一个或多个基于java的配置类中加载上下文定义,适用于java注解的方式
  • ClassPathXmlApplicationContext:从类路径下的一个或多个xml配置文件中加载上下文定义,适用于xml配置的方式
  • FileSystemXmlApplicationContext:从文件系统下的一个或多个xml配置文件中加载上下文定义,也就是说系统盘符中加载xml配置文件
  • AnnotationConfigWebApplicationContext:专门为web应用准备的,适用于注解方式
  • XmlWebApplicationContext:从web应用下的一个或多个xml配置文件加载上下文定义,适用于xml配置方式