IoC容器是Spring的核心,用于管理对象的实例化和初始化,以及对象从创建到销毁的整个生命周期。

Spring中使用的对象都由IoC容器管理,不需要手动使用new运算符创建对象。由IoC管理的对象称为Spring Bean(本质上就是Java对象)和使用new运算符创建的对象没有区别。

Spring通过读取XML 或 Java注解中的信息来获取哪些对象需要实例化。

Spring提供 2 种不同类型的IoC容器:

BeanFactory ApplicationContext

一、BeanFactory

BeanFactory 是最简单的容器,由 org.springframework.beans.factory.BeanFactory 接口定义,采用懒加载(lazy-load),所以容器启动比较快。BeanFactory 提供了容器最基本的功能,为了能够兼容 Spring 集成的第三方框架(如:BeanFactoryAware、InitializingBean、DisposableBean),目前仍然保留了该接口。

简而言之,BeanFactory 就是一个管理 Bean 的工厂,它主要负责初始化各种 Bean,并调用它们的生命周期方法。
BeanFactory 接口有多个实现类,最常见的是 XmlBeanFactory。

Resource参数来初始 XmlBeanFactory 类:

  1. Resource resource = new ClassPathResource("applicationContext.xml");
  2. BeanFactory factory = new XmlBeanFactory(resource);

二、ApplicationContext

ApplicationContext 继承了 BeanFactory 接口,由 org.springframework.context.ApplicationContext 接口定义,对象在启动容器时加载。ApplicationContext 在 BeanFactory 的基础上增加了很多企业级功能,例如 AOP、国际化、事件支持等。

1、ClassPathXmlApplicationContext

从类路径ClassPath中寻找指定的XML配置文件,并完成ApplicationContext的实例化工作:

  1. ApplicationContext applicationContext = new ClassPathXmlApplicationContext(String configLocation);

2、FileSystemXmlApplicationContext

该类从指定的文件系统路径中寻找指定的XML配置文件:

  1. ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String configLocation);

在一般的Java项目中,会采用ClassPathXmlApplicationContext类实例化ApplicationContext容器的方式;在Web项目中,ApplicationContext容器的实例化工作会交由Web服务器完成,使用基于ContextLoaderListener的方式实现,需要在web.xml 中添加如下代码:

  1. <!--指定Spring配置文件的位置,有多个配置文件时,以逗号分隔-->
  2. <context-param>
  3. <param-name>contextConfigLocation</param-name>
  4. <!--spring将加载spring目录下的applicationContext.xml文件-->
  5. <param-value>
  6. classpath:spring/applicationContext.xml
  7. </param-value>
  8. </context-param>
  9. <!--指定以ContextLoaderListener方式启动Spring容器-->
  10. <listener>
  11. <listener-class>
  12. org.springframework.web.context.ContextLoaderListener
  13. </listener-class>
  14. </listener>

参考

1、Spring IoC容器