gpt4 book ai didi

spring - Spring 中的 Setter DI 与 Constructor DI?

转载 作者:IT老高 更新时间:2023-10-28 13:47:23 29 4
gpt4 key购买 nike

Spring 有两种两种类型的 DI:setter DI 和构造 DI。

基于构造函数的 DI 修复了需要注入(inject)依赖项的顺序。基于 Setter 的 DI 不提供此功能。

基于 Setter 的 DI 帮助我们仅在需要时才注入(inject)依赖项,而不是在构建时需要它。

我没有看到任何其他显着差异,因为两种类型的 Spring DI 都提供相同的功能 - setter 和 constructor DI 在代码启动时注入(inject)依赖项。当然,构造函数 DI 将通过构造函数进行,而 setter DI 将在构造对象后立即通过 setter 进行,但在性能等方面对开发人员没有任何影响。两者都提供了指定顺序的方法依赖注入(inject)也是如此。

我正在寻找一种情况,其中一种比另一种具有明显优势,或者一种类型完全无法使用。

最佳答案

说到 Spring 具体的优缺点:

  • 构造函数注入(inject)(根据定义)不允许您在 bean 之间创建循环依赖关系。这个限制实际上是构造函数注入(inject)的一个优点——当你使用 setter 注入(inject)时,Spring 可以解决循环依赖,而你甚至都没有注意到。

  • 另一方面,如果您使用构造函数注入(inject),CGLIB 无法创建代理,这将迫使您使用基于接口(interface)的代理或虚拟的无参数构造函数。见:SPR-3150

关于spring - Spring 中的 Setter DI 与 Constructor DI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7779509/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com