为什么在Spring应用中不建议使用属性注入(Field Injection)
概述
在本文中,我们将探讨为什么不建议使用属性注入(Field Injection),以及我们可以使用哪些替代方法和推荐的用法。
依赖注入
简单讲,对象使用其依赖对象而不需要定义或创建它们的过程称为依赖注入。 其是Spring框架的核心功能之一。
以下描述是根据Spring 官方文档翻译过来的。
依赖注入 (DI) 是一个过程,对象仅通过构造函数参数、工厂方法的参数或对象实例构造后设置的属性来定义其依赖项(即与它们一起工作的其他对象)。 从工厂方法返回。 然后,容器在创建 bean 时注入这些依赖项。 这个过程从根本上来说是 bean 本身的逆过程(因此得名“控制反转”),通过使用类的直接构造或服务定位器模式自行控制其依赖项的实例化或位置。
采用 DI 原则,代码更加清晰,并且当对象提供其依赖项时,解耦更加有效。 该对象不会查找其依赖项,也不知道依赖项的位置或类。 因此,您的类变得更容易测试,特别是当依赖项位于接口或抽象基类上时,这允许在单元测试中使用存根或模拟实现。
依赖注入有三种方式:
- 构造器注入(Constructor injection)
- Setter注入(Setter injection)
- 属性注入(Field injection)
其中属性注入一般会使用 @Autowired 注解将依赖对象直接注入到类中。 尽管这可能是最简单的方法,但是它可能会导致潜在的问题。
在最新的Spring 官方文档中,已经不再提供字段注入(Field i