当依赖解析由外部代理而不是类本身进行时,它被称为依赖注入。
Spring 框架支持两种标准的依赖注入方式,通过构造函数参数或使用 setter 方法。
前一种类型的依赖注入被称为 构造函数 注入,后者称为 setter 注入。 两种方法都有不同的用途,并且各有优缺点。
关键精华
- 构造函数注入确保完整的对象创建和所有的依赖; setter 注入允许创建部分对象。
- 构造函数注入促进了不变性; setter 注入允许可变对象。
- 构造函数注入防止循环依赖; setter 注入会导致循环依赖。
构造函数注入与 Setter 注入
构造函数注入是spring框架中依赖注入的一种,使用构造函数来注入依赖。 setter 注入是 spring 框架中的一种依赖注入,它使用 setter 方法来注入依赖。 它可以注入部分依赖并且更灵活。
构造函数注入是spring框架中依赖注入的一种,使用构造函数来注入依赖。 任何类所需的依赖项都指定为该特定类的构造函数的参数。
构造函数注入不允许开发人员构造任何对象,除非所有的依赖项都准备好了,因此它确保了成功的依赖项注入。
Setter注入是Spring框架中的一种依赖注入,使用setter方法来注入依赖。 它具有 set XYZ () 形式的 setter 方法,其中 XYZ 表示将依赖对象注入客户端的依赖关系。
这种解决依赖的方式在Spring框架中很常见。
对比表
比较参数 | 构造函数注入 | 二传手注射 |
---|---|---|
依赖注入 | 它使用构造函数。 | 它使用 setter 方法。 |
可读性 | 与 setter 相比,它的可读性不高。 | 它更具可读性。 |
覆盖属性 | 无法覆盖依赖性。 | 可以覆盖某些依赖项。 |
更改 | 它总是创建一个新的 bean 实例。 | 它不会创建任何新的 bean 实例。 |
不变性 | 它支持不变性。 | 它不支持。 |
什么是构造函数注入?
构造函数注入是 Spring 框架内解决依赖关系的标准方法之一,它通过将这些作为参数分配给类的构造函数来静态定义类所需的依赖项列表。
所有需要依赖的类都必须在其内部有一个公共构造函数,该构造函数将一个实例作为构造函数参数,并且该构造函数必须是该类中唯一的公共构造函数。
如果需要多个依赖项,则应将附加参数添加到同一构造函数中。 应遵循单一职责原则以确保依赖项被完全注入,即成员只应做一件事。
构造函数应该不受任何其他逻辑的影响,以使类的构造函数更快、更可靠。
构造函数注入的一个重要事实是,除非所有依赖项都准备就绪,否则不会构造对象。 由于每次调用构造函数时它都会创建新实例,因此无法在其中覆盖。
构造函数注入基本上用于需要创建具有所有依赖项的对象的情况。这是正确实现依赖关系的最适用且最简单的方法。
什么是 Setter 注射?
Setter注入是Spring框架内解决依赖关系的标准方法之一,它使用setter方法来解决依赖关系。 setter 方法的形式为 set XYZ (),其中 XYZ 指定需要注入的依赖项。
在这种注入方法中,首先创建对象,然后注入依赖项。 为了配置 Spring, XML 使用文件; 因此,可读性是一个大问题。
由于 setter 方法具有指定形式的方法名称,因此它在许多方面增强了可读性。 当需要注入大量依赖项时,那么 setter 注入类型比其他类型的注入方法更受青睐和首选。
除此之外,通过使用 setter 注入,开发人员可以轻松覆盖和更改值,因为它不会每次都创建新的 bean 实例。 setter 注入的唯一缺点是它不能确保完整的依赖注入。
无法保证某个对象是否已注入依赖项。 换句话说,这意味着可能存在一个不完全依赖的对象。 Setter注入是实现依赖注入最灵活、最常用的方式。
构造函数注入和 Setter 注入的主要区别
- 当使用构造函数注入来注入依赖项时,它是通过在任何 Spring 管理的 bean 上使用构造函数来完成的,而 Setter 注入则使用 setter 方法(如 set dependency())来注入对 Spring IOC 容器管理的任何 bean 的依赖项。
- 与构造函数注入相比,Setter 注入更具可读性,因为 setter 方法的名称始终以 setXYZ() 等单词开头,因此,在 Spring 中很容易阅读 XML 配置文件并解释正在设置的依赖关系,而构造函数注入使用索引来注入依赖关系。
- 某些依赖项可以使用 setter 注入来覆盖,而使用构造函数注入是不可能的,因为每次调用构造函数时都会创建一个新对象。
- 通过使用 setter 注入,可以很容易地更改值,因为它不会创建任何新的 bean 实例,而使用构造函数注入时情况并非如此,因为它总是创建一个新的 bean 实例。
- 构造函数注入支持不变性,而另一方面,setter 注入不支持不变性。
- https://digitalcommons.calpoly.edu/csse_fac/34/
- 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 日
Piyush Yadav 在过去的 25 年里一直在当地社区担任物理学家。 他是一位物理学家,热衷于让我们的读者更容易理解科学。 他拥有自然科学学士学位和环境科学研究生文凭。 你可以在他的网站上阅读更多关于他的信息 生物页面.
对构造函数和 setter 注入的解释强调了正确管理对象依赖关系对于健壮且可维护的软件开发的重要性。
确实,Vcox。仔细考虑依赖注入方法对于确保软件系统的长期可行性和可维护性至关重要。
表达得很好,Vcox。有效管理依赖关系是开发可扩展且可维护的应用程序的一个关键方面。
有关构造函数和 setter 注入的详细信息使开发人员能够深入了解如何在 Spring 框架应用程序中有效管理依赖项。
没错,罗杰斯·娜塔莎。了解依赖注入方法的复杂性对于维护干净且可扩展的代码库至关重要。
构造函数和 setter 注入如何为不变性和循环依赖提供不同级别的支持,从而影响应用程序的设计和行为,这非常有趣。
当然,克里斯蒂安13。选择依赖注入方法时,循环依赖和对象不变性的潜力应该是核心考虑因素。
我完全同意,克里斯蒂安13。这些差异对整个系统架构的影响是巨大的,必须仔细考虑。
比较表简要概述了构造函数和 setter 注入的优缺点,使您可以更轻松地决定在不同的上下文中使用哪一种。
绝对是,阿莫里斯。选择注入方法时,必须权衡对象创建的不变性、可读性和完整性之间的权衡。
我很欣赏详细的比较。它可以帮助开发人员根据应用程序的具体要求做出明智的决策。
对构造函数和 setter 注入的深入解释为了解每种方法的差异和用例提供了宝贵的见解。
说得好,达伦。了解依赖注入方法的基本概念和含义对于开发人员构建健壮且可维护的系统至关重要。
构造函数和 setter 注入的详细解释揭示了对象创建的完整性和管理依赖项的灵活性之间的权衡。
绝对是,伊甸60。平衡依赖注入的完整性和灵活性对于开发可扩展和可维护的软件应用程序至关重要。
总结得很好,Eden60。了解这些权衡对于就软件系统的设计和架构做出明智的决策至关重要。
构造函数和 setter 注入之间的比较使开发人员可以清楚地了解每种方法对应用程序的整体设计和行为的影响。
说得好,逃亡。了解不同依赖注入方法的含义对于开发健壮且可维护的软件解决方案至关重要。
构造函数和 setter 注入的比较清楚地表明,这两种方法都具有明显的优点以及对应用程序的整体设计和行为的影响。
绝对是,Qrogers。必须评估每种注入方法的具体要求和影响,以做出明智的设计决策。
对构造函数和 setter 注入的深入解释为开发人员提供了如何有效设计和管理复杂依赖项的宝贵见解。
说得好,Archie30。透彻理解依赖注入方法对于设计健壮且可维护的软件架构至关重要。
很好的解释!这两种依赖注入方法都有其优点和缺点,必须在每个项目中仔细考虑。
我同意,艾娃。当需要确保具有所有依赖项的完整对象创建时,构造函数注入是一个不错的选择,而 setter 注入更灵活,但不能保证完整的依赖项注入。
感谢您的清晰解释。评估项目的具体需求以确定最合适的依赖注入方法非常重要。