跳到主要内容

依赖项

DeepSeek V3 中英对照 Dependencies

一个典型的企业应用程序并不由单一对象(或 Spring 术语中的 bean)组成。即使是最简单的应用程序,也有几个对象协同工作,向最终用户呈现一个连贯的应用程序。接下来的部分将解释如何从定义一系列独立的 bean 定义,到一个完全实现的应用程序,其中对象协作以实现目标。

章节摘要

📄️ 依赖注入

依赖注入(Dependency Injection,DI)是一种过程,通过这个过程,对象仅通过构造函数参数、工厂方法参数或在对象实例构造或从工厂方法返回后设置的属性来定义它们的依赖关系(即它们所依赖的其他对象)。容器在创建 bean 时注入这些依赖项。这个过程从根本上说是 bean 本身通过直接构造类或使用服务定位器模式来控制其依赖项的实例化或位置的逆过程(因此得名,控制反转)。

📄️ 延迟初始化的 Beans

默认情况下,ApplicationContext 实现会在初始化过程中急切地创建和配置所有单例 bean。通常,这种预实例化是可取的,因为配置或周围环境中的错误会立即被发现,而不是在几个小时甚至几天后才发现。当这种行为不可取时,可以通过将 bean 定义标记为延迟初始化来防止单例 bean 的预实例化。延迟初始化的 bean 告诉 IoC 容器在第一次请求时创建 bean 实例,而不是在启动时创建。

📄️ 方法注入

在大多数应用场景中,容器中的大多数 bean 都是单例的。当一个单例 bean 需要与另一个单例 bean 协作,或者一个非单例 bean 需要与另一个非单例 bean 协作时,通常通过将一个 bean 定义为另一个 bean 的属性来处理依赖关系。当 bean 的生命周期不同时,就会出现问题。假设单例 bean A 需要使用非单例(原型)bean B,可能是在 A 的每次方法调用时。容器只会创建单例 bean A 一次,因此只有一次机会设置属性。容器无法在每次需要时为 bean A 提供一个新的 bean B 实例。