我在有关Spring MVC和Portlet的一些帖子中读到,不建议使用 字段注入 。据我了解, 字段注入 是当您使用以下方式注入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; } }
这两种类型的注射都有哪些优点和缺点?
编辑1: 由于此问题被标记为该问题的重复,我检查了它。因为在问题和答案中都没有任何代码示例,所以我不确定我所使用的注入类型是否正确。
注射类型
有三种方法可以将依赖项注入到bean中:
您正在使用选项3。这就是@Autowired直接在字段上使用时发生的情况。
注射指南
Spring建议的一般准则如下(请参阅有关基于构造函数的DI或基于Setter的DI的部分):
场注入的缺点
为何不赞成使用场注入技术,原因如下:
结论
根据您的需求,您应该主要使用构造函数注入或构造函数和setter注入的某种混合。场注入具有许多缺点,应该避免。场注入的唯一优点是写起来更方便,但没有克服所有缺点。
进一步阅读
我写了一篇博客文章,介绍为什么通常不建议使用字段注入:字段依赖注入被认为有害。