当前位置: 首页 > 知识库问答 >
问题:

使用Guice在子类中注入依赖项

屈翰飞
2023-03-14

我想在使用guice实例化子类时,将依赖项注入父类。在下面的示例中,我试图创建TrainingCommandData的一个实例,同时希望能够在运行时使用Guice注入TelemetryServiceClient。我该怎么做?

public class TrainingCommandData extends CommandData {

    private Intent intent;

    public TrainingCommandData(UserCommandResource userCommandResource, Intent intent) {
        super(userCommandResource);
        this.intent = intent;
    }
}

public class CommandData {

    private TelemetryServiceClient telemetryServiceClient;
    private UserCommandResource userCommandResource;

    @Inject
    public void setTelemetryServiceClient(TelemetryServiceClient telemetryServiceClient) {
        this.telemetryServiceClient = telemetryServiceClient;
    }

    public CommandData(UserCommandResource userCommandResource) {
        this.userCommandResource = userCommandResource;
    }
}

共有1个答案

潘英豪
2023-03-14

当您扩展一个类时,guice将为您处理父依赖项的注入。因此,您只需让Guice为您创建一个TrainingCommandData实例,就可以自动注入TelemetryServiceClient。

上面的代码有一些问题:

  1. 你需要在非默认构造函数上加上“@Inject”。。。当然,guice必须能够为您创建所有参数。如果您现在只是在运行时查看这些参数,请查看辅助注入扩展
  2. 在您的用例中,使用setter注入不是一个好的选择。。。为什么commanddata建议可以在运行时设置服务的新实例?我不会提供setter,而是使用字段注入,或者,如果你不喜欢的话,使用构造函数注入
 类似资料:
  • 我已经使用GoogleGuice几个月了。我对它很满意,但似乎我用错了。我创造了很多辅助注射,有时还有两个注射器。 因此,我想了解这里的一般原则。 是否应该为连接主类所有内容的所有应用程序配备一个喷油器? 最佳实践是关于从应用程序一开始就尝试在构造函数中注入大量内容吗?(我看到了测试的优势) 我的主要问题是,有时我觉得某些对象组的创建属于某个组件。有必要封装它吗?你会如何处理? 当您拥有一个重要的

  • 我有一个小小的两难问题,涉及到Guice和避免非Guice单例。考虑一个多模块项目,其中有3个模块:、和。和都使用模块内的类的实例(该模块是times方法,并在整个项目中广泛使用)。 几乎每个类都需要使用这个实例(包括在用户连接时动态创建的对象)。 如果每个类都需要类的一个实例,那么不同的方法都有缺点: 解决方案2(仅作为实例字段): 缺点:与上面类似,您必须使用Guice的来实例化每个对象。这意

  • 我正在努力实现DI,特别是使用guice的构造函数注入。我很难理解如何将泛型的类类型注入到构造函数中。 我的课程如下: 我可以在运行时使用guice将类的类型注入构造函数吗?简而言之,我可以使用guice注入Foo构造函数吗?

  • 问题内容: 我的团队正在研究依赖项注入框架,并试图在使用Google-Guice和PicoContainer之间做出选择。 我们正在寻找框架中的几件事情: 较小的代码占用空间-我的意思是较小的代码占用空间是我们不想在我们的代码库中到处都有依赖项注入代码垃圾。如果我们需要在将来进行重构,我们希望它尽可能简单。 性能-创建和注入对象时,每个框架有多少开销? 易于使用-学习曲线是否很大?我们是否必须编写

  • 我有一个非常简单的场景可以使用 DI 解决,但我无法找到合适的示例/文档来帮助我完成。我是Scala/Guice世界的新手。 当前组件看起来像这样 现在,我在Foo和Bar之间有一个依赖项。所以,通常代码看起来像这样 其中只是返回。当然,为了简洁起见,我删除了工厂/助手。 我意识到,当我使用“new”时,这已经脱离了DI范式。我希望确保可以基于参数将Bar注入FooImpl。有点像使用工厂。我们如

  • 问题内容: 我需要使用spring框架在抽象超类中注入依赖项。 我每次实例化Abstract class B时都需要传递超类依赖关系(可以在我的项目中以100多种方式将其子类化) application.xml(Spring上下文文件)中的条目 我如何才能在application.xml中创建超类AbstractClassB的bean引用,以便可以在所有子类bean创建中使用它? 问题答案: 你可