构造函数注入与字段注入

新手上路,请多包涵

注入任何服务时,我有两种选择:

字段注入:

  @Inject
 private MyService myService;

构造函数注入:

 private MyService myService;

@Inject
public ClassWhereIWantToInject(MyService mySerivce){
    this.myService = myService;
}

为什么 Constructor injectionField injection 好?

原文由 Riadh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 401
2 个回答

我发现现场注入只有两个缺点。

  • 当对象被测试时很难注入模拟。 (可以用 Mockito 的 @InjectMocks 解决)

  • 循环依赖。 If bean A depends on bean B and bean B needs bean A .如果你有构造函数注入,很容易找到它。

原文由 dehasi 发布,翻译遵循 CC BY-SA 4.0 许可协议

做类似的事情(我假设你正在使用 spring-boot 或类似的 CDI)

 public class ClassWhereIWantToInject{

    private MyService myService;

    @Inject
    public ClassWhereIWantToInject(MyService mySerivce){
        this.myService = myService;
    }
}

在这个相关 问题 上,有一些有效的论据为什么要通过构造函数使用注入而不是通过字段注入。它归结为这样的优势,即您也可以在非 CDI 环境(即单元测试)中通过构造函数使用初始化,而无需添加更复杂的逻辑。

原文由 hecko84 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题