我在一些关于 Spring MVC 和 Portlets 的文章中读到不推荐使用 _字段注入_。据我了解, 字段注入 是当您使用 @Autowired
注入 Bean 时,如下所示:
@Component
public class MyComponent {
@Autowired
private Cart cart;
}
在我的研究过程中,我还阅读了有关 构造函数注入 的内容:
@Component
public class MyComponent {
private final Cart cart;
@Autowired
public MyComponent(Cart cart){
this.cart = cart;
}
}
这两种注射方式的优缺点是什么?
编辑1: 由于这个问题被标记为 这个问题 的重复,我检查了它。因为在问题和答案中都没有任何代码示例,我不清楚我的猜测是否正确,我正在使用哪种注入类型。
原文由 T. Jung 发布,翻译遵循 CC BY-SA 4.0 许可协议
注射类型
对于如何将依赖项注入到 bean 中,有三个选项:
您正在使用选项 3。这就是当您直接在您的字段上使用
@Autowired
时发生的情况。注射指南
Spring 推荐的 一般准则(参见 Constructor-based DI 或 Setter-based DI 部分)如下:
现场注入的缺点
现场注入不被认可的原因如下:
结论
根据您的需要,您应该主要使用构造函数注入或构造函数和设置器注入的某种组合。现场注入有很多缺点,应该避免。字段注入的唯一优点是写起来更方便,并没有超过所有的缺点。
进一步阅读
我写了一篇关于为什么通常不建议使用字段注入的博客文章: Field Dependency Injection Considered Harmful 。