我是 Google Guice 的新手,正在尝试弄清楚它是如何工作的。我有以下代码,我创建了一个提供注入依赖项的实现的模块:
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Provides;
public class GuiceTest {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new TestModule());
TestClass testClass = injector.getInstance(TestClass.class);
testClass.test();
}
}
class TestClass {
@Inject
SomeClass someClass;
public void test() {
someClass.test();
}
}
class SomeClass {
@Inject
SomeDependency someDependency;
public void test() {
someDependency.test();
}
}
class SomeDependency {
public void test() {
System.out.println("SomeDependency test");
}
}
class TestModule extends AbstractModule {
@Override
protected void configure() {}
@Provides
public SomeClass provideSomeClass() {
return new SomeClass();
}
@Provides
public SomeDependency provideSomeDependency() {
return new SomeDependency();
}
}
SomeClass
被注入一切正常,但 SomeDependency
在 SomeClass
类中为空。我不确定为什么它会为空,因为我确实在模块中定义了一个提供程序。 SomeDependency
实例为空的原因是什么?
正如 Andy Turner 所指出的,您并不是要求 Guice 创建 SomeClass
的实例,而是在用
@Provides
注释的方法中显式实例化它。如果你删除它,Guice 应该能够通过调用它的 not arg 构造函数来创建你的
SomeClass
实例。