依赖注入在春季如何工作?更新:

2022-09-02 12:55:21

我想知道弹簧是如何进行依赖注入的。我想使用低级逻辑。

更新:

我想知道对象引用是如何注入构造函数或 setter 方法的,是通过反射还是通过某个字节代码级别。


答案 1

Java组件/类应尽可能独立于其他Java类。这增加了重用这些类并独立于其他类(单元测试)测试它们的可能性。要将Java组件与其他Java组件分离,应该将对某个其他类的依赖关系注入其中,而不是类本身创建/找到此对象。

如果类 A 使用类 B 作为变量,则类 A 与类 B 具有依赖关系。

如果使用依赖注入,则通过类A的构造函数将类B分配给类A - 这称为构造注入;或通过二传机 - 这称为二传注射

依赖注入的一般概念称为控制反转。类不应自行配置,而应从外部进行配置。

基于独立类/组件的设计增加了软件的可重用性和测试的可能性。例如,如果类 A 需要一个 Dao(数据访问对象)来从数据库接收数据,您可以轻松创建另一个模拟数据库连接的测试对象,并将此对象注入 A 以测试 A,而无需实际的数据库连接。

基于依赖注入的软件设计可以使用标准Java。

Spring只是通过提供提供配置的标准方式和管理对所创建对象的引用,在使用依赖注入时增加了一些简化。

欲了解更多信息,请阅读

编辑1

当Spring初始化其上下文时,它会创建在Spring应用程序上下文中预先定义的所有bean.xml文件。现在假设你的Bean A具有B的依赖关系,那么B的Obj已经与Spring在一起,因为它已经在Spring初始化时成功创建了。然后,Spring 将在类 A 中搜索 setter 方法,并将 B 的 Obj 设置在那里。

编辑2:

请阅读 5.4.1 Setter Injection


答案 2

依赖项的配置是从 XML、注释或 Java DSL (JavaConfig) 中读取的。然后,Spring DI 引擎使用 Java 反射 API 根据配置中的元数据连接依赖项。


推荐