【问题标题】:Why setter injection does not ensures dependency Injection in Spring?为什么 setter 注入不能确保 Spring 中的依赖注入?
【发布时间】:2017-04-24 12:15:55
【问题描述】:

在基于构造函数的注入中,它将创建具有所有依赖项的完整对象,但是在基于 setter 的注入的情况下,它将如何创建具有部分依赖项的对象?

【问题讨论】:

  • setter 是一个方法调用,不能保证该方法会被调用。使用构造函数,您根本无法构造处于无效状态的对象。
  • Spring 调用默认构造函数,然后尝试通过 setter 向该实例注入值。你不会看到区别。无论如何,你会得到一个构造良好的对象。
  • @M.Deinum :据我了解,setter 默认从 spring 调用,那么它怎么能错过呢?
  • 谁说只有 spring 会构造你的对象...
  • @M.deinum:这就是我要问的。不知道spring会怎么调用setter方法!!!

标签: java spring dependency-injection inversion-of-control


【解决方案1】:

当需要依赖时应该使用基于构造函数的注入,因为创建对象的唯一方法是拥有所有参数。

当不需要依赖时,应该使用基于 Setter 的注入。该对象首先被实例化,然后调用依赖项的设置器,但是,如果未找到依赖项,则注入 null。

您可以混合使用基于构造函数和设置器的注入。

【讨论】:

  • 它不会注入null。对于不需要依赖项的情况,它根本不会调用 setter。
猜你喜欢
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
相关资源
最近更新 更多