# Java Spring IoC 容器示例 > 原文: [https://javatutorial.net/java-spring-ioc-container-example](https://javatutorial.net/java-spring-ioc-container-example) 简而言之,IoC 容器负责实例化/创建和配置对象以及组装对象之间的依赖关系。 ![java-featured-image](img/e0db051dedc1179e7424b6d998a6a772.jpg) 您可能想知道.. IoC 容器如何接收执行上述操作的数据? 答案来自 3 个地方中的 1 个:XML 文件,Java 代码或 Java 注解。 IoC 容器是 Spring 中的一个框架,用于管理 POJO(普通的旧 Java 对象)的生命周期,并在需要时将其插入 Java 程序中。 通常,Java 对象通过两种方式声明其依赖项: 1. 通过将它们作为参数传递给构造函数 2. 通过将它们作为参数传递给对象的 setter 方法 Spring IoC 容器的基础有两个软件包: **org.springframework.beans** 和 **org.springframework.context** 。 [BeanFactory](https://docs.spring.io/spring/docs/1.2.x/reference/beans.html) 接口管理许多 Bean,同时,这些 Bean 之间也具有依赖关系。 它提供了基本功能,更重要的是,它提供了 **ApplicationContext** ,它是 BeanFactory 的子接口。 在应用程序运行时,它是只读的;如果实现允许并管理 Bean 的生命周期,则可以重新加载它。 此时,依赖关系不是由 Java 对象管理,而是由框架管理。 **倒置** (如果您知道我的意思)。 **配置元数据**是赋予与我在本教程开始时提到的任务相关的指令的术语-对象的实例化,配置和组装。 ![IoC Container](img/5282d34ac45723aba9479d489d60afe6.jpg) 从上图可以看到,本质上发生的是配置元数据(对象的实例化,配置和组装),并且 JOVO 正在传递到 IOC 容器(很可能是 ApplicationContext 的实例)。 ### 如何实例化 ApplicationContext ```java ApplicationContext context = new ClassPathXmlApplicationContext("services.xml"); ``` 将 ApplicationContext 也视为简单的配置。 它从 XML 文件或注释中加载“配置”。 需要在应用程序的开头创建 ApplicationContext,以便它读取应用程序读取所需的所有内容。 以防万一,您可以在应用程序中包含许多 ApplicationContext。 您甚至可以使它们从同一配置文件读取。 这是个好习惯吗? 取决于您要实现的目标。 大多数人会建议将所有 bean 配置在一个位置(通过 XML 或另一个位置)并由单个应用程序上下文加载。 以下示例取自[原始 Spring 文档](https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/beans.html),请随时查看以获取有关 Spring 的深入了解。 **services.xml** ```java ``` 同样,您可以将 services.xml 视为配置文件,然后将 **ApplicationContext** 加载/读取。 ## 结论 当您只用简单的 DI(去势注入)而无法使用时,为什么还要使用 IoC 容器? 好吧,这里有几个原因: 1. 优雅 2. 易于在生产和测试模式之间进行切换 1. 只需更改配置 但是有一个缺点,那就是有时正确地实现 IoC 容器有些棘手。