gpt4 book ai didi

java - 命名字符串字段上的 Guice 注入(inject)

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:59:45 25 4
gpt4 key购买 nike

我有一个类:

public class FizzBuzz {
@Named("Red") private String redService;

public static void main(String[] args) {
GuiceTest testApp = new GuiceTest();

testApp.run();
}

private void run() {
Injector inj = Guice.createInjector(new MyModule());

redService = (String)inj.getInstance(String.class);

// Should print "red-service" but is instead an empty string!
System.out.println("redService = " + redService);
}

// ... Rest of class omitted for brevity
}

public class MyModule extends AbstractModule {
@Override
protected void configure() {
bind(String.class).annotatedWith(Names.named("Red")).toInstance("red-service");
}
}

在我的模块中,我指示 Guice 将所有 String.class 实例 @Named“Red”绑定(bind)到字符串实例“red-service”,但我没有这样做在输出的打印语句中看到这一点。我如何错误地使用 Guice?

最佳答案

让我总结一下这里已经发表的一些评论......

  1. 你忘记了 @Inject 注解
  2. 我强烈建议将 Guice/Injector 放在 FizzFuzz 之外。使用静态 main 方法引导您的应用程序(不是 run())。
  3. 可以通过 bindConstant 轻松将字符串绑定(bind)到常量。

这会让你想到这样的事情:

public class FizzFuzz {
@Inject
@Named("red")
private String service;

public static void main(String[] args) {
FizzFuzz fizzFuzz = Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
bindConstant().annotatedWith(Names.named("red")).to("red-service");
}
}).getInstance(FizzFuzz.class);

System.out.println(fizzFuzz.service);
}
}

关于java - 命名字符串字段上的 Guice 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10838335/

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