Google Guice 提供程序未创建依赖项实例

问题描述 投票:0回答:1

我是 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
实例为空的原因是什么?

java guice
1个回答
0
投票

正如 Andy Turner 所指出的,您并不是要求 Guice 创建 SomeClass

 的实例,而是在用 
@Provides
 注释的方法中显式实例化它。如果你删除它,Guice 应该能够通过调用它的 not arg 构造函数来创建你的 
SomeClass
 实例。

© www.soinside.com 2019 - 2024. All rights reserved.