首页 > Java > java教程 > 为什么在 Spring 中构造函数或 Setter 注入优于字段注入?

为什么在 Spring 中构造函数或 Setter 注入优于字段注入?

DDD
发布: 2024-12-08 01:54:12
原创
292 人浏览过

Why Is Constructor or Setter Injection Preferred Over Field Injection in Spring?

什么是字段注入以及为什么通常不首选它

在 Spring MVC 和 Portlet 应用程序中,字段注入是指直接将依赖项注入到带注释的字段中的做法使用@Autowired,如以下示例所示:

@Component
public class MyComponent {
    @Autowired
    private Cart cart;
}
登录后复制

作为替代方案,构造函数注入涉及传递依赖作为构造函数中的参数:

@Component
public class MyComponent {
    private final Cart cart;

    @Autowired
    public MyComponent(Cart cart) {
        this.cart = cart;
    }
}
登录后复制

优点和缺点:

构造函数注入有几个优点:

  • 不变性: 它允许创建不可变对象,因为依赖项是根据实例化。
  • 松散耦合:类对 DI 容器的依赖性较松散,可以在其外部使用。
  • 可测试性:对象可以无需反射即可实例化进行单元测试。

Setter 注入也是一种选项,提供一种注入依赖项的机制,该依赖项可能是可选的或随时间变化的。

相反,字段注入有几个缺点:

  • 紧密耦合: 它与 DI 容器创建紧密耦合。
  • 不变性: 它阻碍不可变对象的创建。
  • 反射要求:它需要反射才能在 DI 容器之外进行实例化。
  • 隐藏依赖项:真正的依赖项是从界面上被遮挡。
  • 太多依赖项:它鼓励添加过多的依赖项,违反了单一职责原则。

注入指南:

Spring 建议遵循以下指南:

  • 使用构造函数注入来实现强制依赖或实现不变性。
  • 对可选或可更改的依赖项使用 setter 注入。
  • 在大多数情况下避免字段注入。

结论:

考虑到字段注入的缺点,通常建议支持构造函数或setter注入。场注入的便利性被其潜在的缺点和限制所抵消。

以上是为什么在 Spring 中构造函数或 Setter 注入优于字段注入?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板