当前位置: 首页 > 面试题库 >

注入私人,包裹或公共场所或提供塞特犬?

程卓君
2023-03-14
问题内容

我看到许多Java示例使用带有私有字段的依赖项注入而没有这样的公共设置器:

public SomeClass {
  @Inject
  private SomeResource resource;
}

但这不是一个好主意,例如在单元测试中应手动执行注入时。

有几种解决方法:

  • 添加公共二传手: setSomeResource(SomeResource r)
  • 公开领域
  • 使现场包装受到保护

我想避免设置器,因为其中什么都没有发生。所以我更喜欢公共或受软件包保护。您有什么推荐的吗?


问题答案:

避免为该字段创建设置器的一种方法是使用构造函数注入。这甚至允许您将字段声明为final。

它是这样的:

public class SomeClass {
    private final SomeResource resource;

    @Inject
    public SomeClass(SomeResource resource) {
        this.resource = resource;
    }
}


 类似资料:
  • 在kotlin中定义一个有公共getter和私有(只有内部可修改)setter的var的正确方法是什么?

  • 这是一个奇怪的用例,我需要一些帮助来弄清楚如何相互结合使用辅助/提供者/FactoryModuleBuilders。忽略的缺失。这只是一个例子。 属于我无法更改的库的一组特征具有以下模式。它使用蛋糕图案。 由于这些特征不能被直接注入,我创建了一个允许它们被注入的包装器 在我的代码中,我有一个依赖于服务的控制器,而服务又依赖于库。根据控制器的需要,服务应能够使用“BB”或“CC”。组件如下所示 我将

  • 我有一个由两个Symfony应用程序使用的库,该库定义了一组我希望公开的服务(我希望能够通过容器直接检索这些服务)。当我尝试访问一个服务时,我有: 编译容器时,已删除或内联库\Service\DerivedServices\OneSpecific实现"服务或别名。您应该将其公开,或者直接停止使用容器,转而使用依赖注入。 问题是,所述服务是公开的。 基本上有: 一个库\服务\BaseService类

  • 我有一个类,它有一个公共方法,它调用另一个私有方法。 通过调用公共方法 并将 设置为 来进行测试。 将更改为package-private并在测试中直接调用它。 然而,我不确定哪种方法更好。

  • 问题内容: 将方法标记为程序包专用类是否有所不同? 之间和此处的可见性是否有实际差异? 问题答案: 如果该类不会被另一个更可见的子类扩展,则唯一的区别是 intent的清晰度* 。将所有方法包都声明为私有,使以后的读者更加难以确定同一包中的其他类将调用哪些方法。 作为我的设计解决方案,这没有多大意义,但是从技术上来说还是有可能的。

  • 我正在使用Dagger-Hilt在我的Android项目中进行依赖注入,现在我遇到了这样的情况,我有一个基本的抽象片段 在这里,我有一个依赖项,即。我正在尝试做的是将注入到BaseViewModel中,以便在及其所有子项中可用。 < li >我尝试的第一种方法是使用构造函数注入,并将其注入到子节点,然后使用构造函数将其传递给超级节点。 这种方法工作得很好,但是我不需要将依赖关系从传递到类,我需要将