org.springframework.context.ApplicationContext 接口代表 Spring IoC 容器,负责实例化、配置和组装 bean。容器通过读取配置元数据来获取关于要实例化、配置和组装哪些对象的指令。配置元数据以 XML、Java 注解或 Java 代码表示。它允许您表达组成应用程序的对象以及这些对象之间丰富的相互依赖关系。

在独立应用程序中一般会使用它的实现类 ClassPathXmlApplicationContext 或则 FileSystemXmlApplicationContext,XML 作为传统的元数据配置方式,但是可以通过提供少量的 XML 配置以声明方式支持这些附加元数据格式,从而指示容器使用 Java 注释或代码作为元数据格式

下图显示了 Spring 如何工作的高级视图。您的应用程序类与配置元数据相结合,以便在 ApplicationContext 创建和初始化之后,您拥有一个完全配置且可执行的系统或应用程序。
image.png

配置元数据

如上图所示,Spring IoC 容器使用一种形式的配置元数据。此配置元数据表示您作为应用程序开发人员如何告诉 Spring 容器实例化、配置和组装应用程序中的对象。

配置元数据传统上以简单直观的 XML 格式提供,本章大部分内容都使用这种格式来传达 Spring IoC 容器的关键概念和特性。

有关在 Spring 容器中使用其他形式的元数据的信息,请参阅:

  • 基于注解的配置:Spring 2.5 引入了对基于注解的配置元数据的支持。
  • 基于 Java 的配置:从 Spring 3.0 开始,Spring JavaConfig 项目提供的许多特性成为核心 Spring Framework 的一部分。因此,您可以使用 Java 而不是 XML 文件来定义应用程序类外部的 bean。要使用这些新功能,请参阅 @Configuration@Bean@Import@DependsOn注释。

比如下面这个文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. https://www.springframework.org/schema/beans/spring-beans.xsd">
  6. <!-- services -->
  7. <bean id="petStore" class="org.springframework.samples.jpetstore.services.PetStoreServiceImpl">
  8. <property name="accountDao" ref="accountDao"/>
  9. <property name="itemDao" ref="itemDao"/>
  10. <!-- additional collaborators and configuration for this bean go here -->
  11. </bean>
  12. <!-- more bean definitions for services go here -->
  13. </beans>

实例化一个容器

  1. ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");

使用容器

  1. // create and configure beans
  2. ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
  3. // retrieve configured instance
  4. PetStoreService service = context.getBean("petStore", PetStoreService.class);
  5. // use configured instance
  6. List<String> userList = service.getUsernameList();