构造函数注入与 Setter 注入:差异与比较

当依赖解析由外部代理而不是类本身进行时,它被称为依赖注入。

Spring 框架支持两种标准的依赖注入方式,通过构造函数参数或使用 setter 方法。

前一种类型的依赖注入被称为 构造函数 注入,后者称为 setter 注入。 两种方法都有不同的用途,并且各有优缺点。

关键精华

  1. 构造函数注入确保完整的对象创建和所有的依赖; setter 注入允许创建部分对象。
  2. 构造函数注入促进了不变性; setter 注入允许可变对象。
  3. 构造函数注入防止循环依赖; setter 注入会导致循环依赖。

构造函数注入与 Setter 注入 

构造函数注入是spring框架中依赖注入的一种,使用构造函数来注入依赖。 setter 注入是 spring 框架中的一种依赖注入,它使用 setter 方法来注入依赖。 它可以注入部分依赖并且更灵活。

构造函数注入与 Setter 注入

构造函数注入是spring框架中依赖注入的一种,使用构造函数来注入依赖。 任何类所需的依赖项都指定为该特定类的构造函数的参数。

构造函数注入不允许开发人员构造任何对象,除非所有的依赖项都准备好了,因此它确保了成功的依赖项注入。

Setter注入是Spring框架中的一种依赖注入,使用setter方法来注入依赖。 它具有 set XYZ () 形式的 setter 方法,其中 XYZ 表示将依赖对象注入客户端的依赖关系。

这种解决依赖的方式在Spring框架中很常见。

对比表

比较参数构造函数注入二传手注射 
依赖注入它使用构造函数。它使用 setter 方法。
可读性与 setter 相比,它的可读性不高。它更具可读性。
覆盖属性无法覆盖依赖性。可以覆盖某些依赖项。
更改它总是创建一个新的 bean 实例。它不会创建任何新的 bean 实例。
不变性它支持不变性。它不支持。

什么是构造函数注入?

构造函数注入是 Spring 框架内解决依赖关系的标准方法之一,它通过将这些作为参数分配给类的构造函数来静态定义类所需的依赖项列表。

另请参阅:  马力与 CC:差异与比较

所有需要依赖的类都必须在其内部有一个公共构造函数,该构造函数将一个实例作为构造函数参数,并且该构造函数必须是该类中唯一的公共构造函数。

如果需要多个依赖项,则应将附加参数添加到同一构造函数中。 应遵循单一职责原则以确保依赖项被完全注入,即成员只应做一件事。

构造函数应该不受任何其他逻辑的影响,以使类的构造函数更快、更可靠。

构造函数注入的一个重要事实是,除非所有依赖项都准备就绪,否则不会构造对象。 由于每次调用构造函数时它都会创建新实例,因此无法在其中覆盖。

构造函数注入基本上用于需要创建具有所有依赖项的对象的情况。这是正确实现依赖关系的最适用且最简单的方法。

构造函数注入

什么是 Setter 注射?

Setter注入是Spring框架内解决依赖关系的标准方法之一,它使用setter方法来解决依赖关系。 setter 方法的形式为 set XYZ (),其中 XYZ 指定需要注入的依赖项。

在这种注入方法中,首先创建对象,然后注入依赖项。 为了配置 Spring, XML 使用文件; 因此,可读性是一个大问题。

由于 setter 方法具有指定形式的方法名称,因此它在许多方面增强了可读性。 当需要注入大量依赖项时,那么 setter 注入类型比其他类型的注入方法更受青睐和首选。

除此之外,通过使用 setter 注入,开发人员可以轻松覆盖和更改值,因为它不会每次都创建新的 bean 实例。 setter 注入的唯一缺点是它不能确保完整的依赖注入。

另请参阅:  粪肥与肥料:差异与比较

无法保证某个对象是否已注入依赖项。 换句话说,这意味着可能存在一个不完全依赖的对象。 Setter注入是实现依赖注入最灵活、最常用的方式。

二传手注入

构造函数注入和 Setter 注入的主要区别 

  1. 当使用构造函数注入来注入依赖项时,它是通过在任何 Spring 管理的 bean 上使用构造函数来完成的,而 Setter 注入则使用 setter 方法(如 set dependency())来注入对 Spring IOC 容器管理的任何 bean 的依赖项。
  2. 与构造函数注入相比,Setter 注入更具可读性,因为 setter 方法的名称始终以 setXYZ() 等单词开头,因此,在 Spring 中很容易阅读 XML 配置文件并解释正在设置的依赖关系,而构造函数注入使用索引来注入依赖关系。
  3. 某些依赖项可以使用 setter 注入来覆盖,而使用构造函数注入是不可能的,因为每次调用构造函数时都会创建一个新对象。
  4. 通过使用 setter 注入,可以很容易地更改值,因为它不会创建任何新的 bean 实例,而使用构造函数注入时情况并非如此,因为它总是创建一个新的 bean 实例。
  5. 构造函数注入支持不变性,而另一方面,setter 注入不支持不变性。
参考资料
  1. https://digitalcommons.calpoly.edu/csse_fac/34/
  2. https://books.google.com/books?hl=en&lr=&id=InfRDwAAQBAJ&oi=fnd&pg=PA63&dq=constructor+injection&ots=Hon_bCw-Kv&sig=VdsD_S0lCfP3D8idI8q4F6RnhoE

最后更新时间:19 年 2023 月 XNUMX 日

点1
一个请求?

我付出了很多努力来写这篇博文,为您提供价值。 如果您考虑在社交媒体上或与您的朋友/家人分享,这对我很有帮助。 分享是♥️

关于“构造函数注入与 Setter 注入:差异与比较”的 25 个思考

  1. 有关构造函数和 setter 注入的详细信息使开发人员能够深入了解如何在 Spring 框架应用程序中有效管理依赖项。

    回复
  2. 构造函数和 setter 注入如何为不变性和循环依赖提供不同级别的支持,从而影响应用程序的设计和行为,这非常有趣。

    回复
  3. 构造函数和 setter 注入的比较清楚地表明,这两种方法都具有明显的优点以及对应用程序的整体设计和行为的影响。

    回复
    • 我同意,艾娃。当需要确保具有所有依赖项的完整对象创建时,构造函数注入是一个不错的选择,而 setter 注入更灵活,但不能保证完整的依赖项注入。

      回复

发表评论

想保存这篇文章以备后用? 点击右下角的心形收藏到你自己的文章箱!