我有一个简单的层次结构,如下所示:

public abstract class AbsFoo {
    protected AbsBoo boo;
}

public class Foo extends AbsFoo {
    public Foo() {
        boo = new Boo(); // Boo extends AbsBoo
    }
}

编辑:应即时创建 AbsFoo 的实例,并且可能不是字段

我可以用注入(inject)替换 boo = new Boo() 吗?

最佳答案

是的:

public abstract class AbsFoo {
    protected AbsBoo boo;
}

public class Foo extends AbsFoo {
    @Inject
    public Foo(Boo boo) {
        super.boo = boo; // Boo extends AbsBoo
    }
}

确保您使用 @Inject 或 injector.getInstance() 构建您的 Foo 实例

编辑

您还可以使用提供程序按需创建实例:
@Inject
Provider<Foo> fooProvider

//...

public void doSomething(){
    //need new foo:
    Foo foo = fooProvider.get();
}

关于dependency-injection - Guice - 如何从 child 的 parent 中注入(inject)抽象字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10667632/

10-10 05:48