因此,由于我一直在使用 Spring,如果我要编写一个具有依赖关系的服务,我会执行以下操作:
@Component public class SomeService { @Autowired private SomeOtherService someOtherService; }
我现在遇到了使用另一种约定来实现相同目标的代码
@Component public class SomeService { private final SomeOtherService someOtherService; @Autowired public SomeService(SomeOtherService someOtherService){ this.someOtherService = someOtherService; } }
这两种方法都可以,我理解。但是使用选项 B 有什么好处吗?对我来说,它在类和单元测试中创建了更多代码。(必须编写构造函数并且不能使用@InjectMocks)
有什么我想念的吗?除了向单元测试添加代码之外,自动装配的构造函数还有什么其他功能吗?这是进行依赖注入的更优选方式吗?
是的,实际上建议使用选项 B(称为构造函数注入)而不是字段注入,并且具有以下几个优点: