【发布时间】:2017-10-06 14:17:03
【问题描述】:
我在使用 Guice 时遇到了空值问题。接下来,我将向您展示一个类似场景的示例。 我知道现场注入是一种不好的做法,但我希望它在演示中像这样工作
我有一个名为 B 的具体类(这是我要注入的类):
class B{
@Inject
public B(){}
public void fooMethod(){
System.out.println("foo!")
}
}
我有一个名为A的抽象类,它有一个类B(我想通过字段注入来注入的那个):
abstract class A{
@Inject
protected B b;
}
现在是另一个名为 C 的具体类,它扩展了 A:
class C extends A{
public void barMethod(){
System.out.println("is b null? " + (b==null)); // is true
}
}
我的guice配置如下:
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();
}
}
然后我用 Spock 做一个测试:
@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。我会假设通过@Provides和new C()的方法,或者完全排除 Guice 的方法。 -
大家好,我已经更新了这个问题的更多细节,就像编辑一样
标签: java testing dependency-injection frameworks guice