gpt4 book ai didi

java - Guice 绑定(bind)未使用 @Named 注释完成

转载 作者:行者123 更新时间:2023-12-02 03:13:33 25 4
gpt4 key购买 nike

我有以下构造函数

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

我的模块:

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

问题是 Guice 不进行绑定(bind)。

现在,如果我删除 @Named 注释,它就会起作用。 getName() 方法已成功调用。 但是,当添加 @Named 注释时,getName() 永远不会被调用,并且我的构造函数最终被注入(inject)了一个空字符串。

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

我还尝试了 configure() 方法中的绑定(bind)(根据文档,但仍然没有任何结果。

有人知道我错过了什么吗?我检查了文档没有结果。

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

最佳答案

对我有用。这是我用来验证的代码(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 {
}

按预期打印“helloWorld”。

关于java - Guice 绑定(bind)未使用 @Named 注释完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40686184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com