1、BeanFactory
BeanFactory可视为Spring的BeanFactory容器,它的主要功能是为依赖注入(Dependency Injection,DI)提供支持。这个容器接口在org.springframework.beans.factory.BeanFactory中被定义。
BeanFactory是用于访问Spring Bean容器的跟接口,是一个单纯的Bean工厂,也就是常说的IoC容器的顶层定义,各种IoC容器是在其基础上为了满足不同需求而扩展的,包括经常使用的ApplicationContext。
在Spring中,有大量对BeanFactory接口的实现。其中,最常被使用的是XmlBeanFactory类。这个容器从一个XML文件中读取配置元数据,由这些元数据来生成一个被配置化的系统或者应用。
2、ApplicationContext
ApplicationContext是BeanFactory的子接口,使用它作为Spring容器更方便。它可以加载配置文件中定义的Bean,将所有的Bean集中在一起,当有请求的时候分配Bean。
ApplicationContext包含BeanFactory所有的功能,一般情况下,相对于BeanFactory,ApplicationContext会被推荐使用。BeanFactory仍然可以在轻量级应用中使用,如移动设备或者基于Applet的应用程序。
最常被使用的ApplicationContext接口实现如下。
- FileSystemXMLApplicationContext:该容器从XML配置文件中加载已被定义的Bean。在这里,用户需要提供XML文件的完整路径给构造器。
- ClassPathXmlApplicationContext:以类加载路径下的XML配置文件创建ApplicationContext实例。
- WebXMLApplicationContext:该容器会在一个Web应用程序的范围内加载在XML文件中已被定义的Bean。
一般不会使用BeanFactory实例作为Spring容器,而是使用ApplicationContext实例作为容器,因此也把Spring容器成为Spring上下文。必须注意的是,在使用Spring框架的Web项目中,ApplicationContext容器的实例化工作会交由Web服务器来完成。Web服务器实例化ApplicationContext容器时,通常会使用基于ContextLoaderListener的方式来实现。