我在一些关于 Spring MVC 和 Portlets 的文章中读到不推荐使用 字段注入。 据我了解, 字段注入 是当您注入一个 Bean 时@Autowired:
@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; } }
这两种注射方式的优缺点是什么?
注射类型
如何将依赖项注入到 bean 中有三个选项:
您正在使用选项 3。这就是您@Autowired直接在您的字段上使用时发生的情况。
注射指南
Spring 推荐的一般准则(参见基于Constructor-based DI或Setter-based DI的部分)如下:
现场注入的缺点
现场注入不被认可的原因如下:
结论
根据您的需要,您应该主要使用构造函数注入或构造函数和设置器注入的某种组合。现场注入有很多缺点,应该避免。字段注入的唯一优点是写起来更方便,并没有超过所有的缺点。
进一步阅读
我写了一篇关于为什么通常不建议使用字段注入的博客文章:Field Dependency Injection Considered Harmful。