我遇到了与Guice一起工作的空值问题。 Nex我给你看一个类似场景的例子。 我知道字段注入是一个不好的做法,但我希望它是这样工作了演示Guice字段注入不起作用(返回null)
我有一个名为乙具体类(这是一个我要注入):
class B{
@Inject
public B(){}
public void fooMethod(){
System.out.println("foo!")
}
}
我有一个名为甲一个抽象类,其中具有类乙(一个我想通过字段喷射来喷射):
abstract class A{
@Inject
protected B b;
}
现在命名为Ç延伸一个另一个具体类:
class C extends A{
public void barMethod(){
System.out.println("is b null? " + (b==null)); // is true
}
}
我吉斯配置如下:
class ConfigModule extends AbstractModule {
@Override
protected void configure(){
// bind(B.class) // I have also tried this
}
@Provides
B getB(){
return new B();
}
@Provides
C getC(){
return new C();
}
}
然后我有斯波克测试:
@UseModules(ConfigModule)
class Test extends Specification{
@Inject
public C c;
def "test"() {
// Here goes the test using:
c.barMethod();
}
}
谢谢:)
你是怎么创建'C'的? –
您的ConfigModule出现并不重要,可以使用B的'@Inject'构造函数将其删除。如果B是必需的但没有限制,Guice不会失败,所以要同意Tavian,它真的归结于你如何从Guice获得C。我会通过一种方法假设'@提供'一个新的C()',或者让Guice完全离开它的某种方式。 –
嗨,大家好,我已经更新了更多的细节问题,我喜欢编辑 –