Guice - 如何从孩子的父母中注入抽象字段

Bos*_*one 2 abstract-class dependency-injection guice

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

public abstract class AbsFoo {
    protected AbsBoo boo;
}

public class Foo extends AbsFoo {
    public Foo() {
        boo = new Boo(); // Boo extends AbsBoo
    }
} 
Run Code Online (Sandbox Code Playgroud)

编辑:AbsFoo的实例应该是动态创建的,可能不是字段

我可以boo = new Boo()用注射剂替换吗?

Joh*_*sen 5

是:

public abstract class AbsFoo {
    protected AbsBoo boo;
}

public class Foo extends AbsFoo {
    @Inject
    public Foo(Boo boo) {
        super.boo = boo; // Boo extends AbsBoo
    }
} 
Run Code Online (Sandbox Code Playgroud)

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

编辑

您还可以使用提供程序按需创建实例:

@Inject
Provider<Foo> fooProvider

//...

public void doSomething(){
    //need new foo:
    Foo foo = fooProvider.get();
}
Run Code Online (Sandbox Code Playgroud)