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

时间:2014-07-26 22:08:25

标签: java dependency-injection guice

我希望在使用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 个答案:

答案 0 :(得分:2)

当你扩展一个类时,guice会为你注入父依赖项。 所以你只需让Guice为你创建一个TrainingCommandData实例,你就会自动注入TelemetryServiceClient。

上述代码存在一些问题:

  1. 你需要在你的非默认构造函数上添加“@Inject”...当然guice必须能够为你创建所有参数。如果您现在只在运行时使用这些参数,请查看辅助注入扩展
  2. 在您的用例中使用setter注入不是一个好选择...为什么您的命令数据表明可以在运行时设置新的服务实例?我不会提供setter但是使用字段注入,或者,如果你不喜欢,那么构造函数注入。