Guice绑定未使用@Named注释完成

时间:2016-11-18 21:27:04

标签: java annotations guice named

我有以下构造函数

for(Item i : Container)
{
     dosomething(i);
}

我的模块:

@Inject
public MyClass(Provider<TestClass> testProvider, @Named("myName") String name) {
  //constructor stuff
}

问题在于Guice没有进行绑定。

现在,如果我删除@Provides @Named("myName") public String getName(SomeObject object) { return object.getName(); } 注释,它就可以了。成功调用了@Named方法。虽然添加了getName()注释,但永远不会调用@Named,并且我的构造函数最终会注入空字符串。

我的getName()注释的方法中只有一个会返回@Provides,但我仍然想命名它,因为String是一个非常常见的对象,可以注入。

我还尝试了String方法中的绑定(根据文档,但仍然没有。

任何人都知道我错过了什么?我检查了文档无济于事。

编辑:我确信我的导入是正确的

1 个答案:

答案 0 :(得分:1)

适合我。这是我用来验证的代码(guice 4.0):

package guice;

import com.google.inject.*;
import com.google.inject.name.Named;


public class Main {
    public static void main(String[] args) {
        Guice.createInjector(new MyModule()).getInstance(MyClass.class);
    }
}

class MyClass {
    @Inject
    public MyClass(Provider<TestClass> testProvider, @Named("myName") String name) {
        System.out.println(name);
    }
}

class MyModule extends AbstractModule {
    @Override
    protected void configure() {
    }

    @Provides
    @Named("myName")
    public String getName(SomeObject object) {
        return object.getName();
    }
}

class SomeObject {
    public String getName() {
        return "helloWorld";
    }
}

class TestClass {
}

打印&#34; helloWorld&#34;如预期的那样。