我是 Guice 注入(inject)液的新手。如何将类注入(inject)到我将在静态方法中使用的静态变量中?
这是我想在 doLocalize() 方法中使用注入(inject)变量 b 的类。
public class A {
@Inject //Trying to inject this class
private static B b;
// Private constructor to prevent initialization.
private A() {}
public static String doLocalize(String word) {
return b.localize(word);
}
}
这是我想要执行 guice 注入(inject)的模块类。
注意:我无法更改 MyModule 和 B 类,因为它来自另一个依赖项。
public class MyModule extends AbstractModule {
public void configure() {
bind(B.class);
// some other binds
}
}
我想要注入(inject)到我的A类中的类
public class B {
public String localize(String word) {
//does some stuff
//returns a modified string
}
}
最佳答案
使用requestStaticInjection
。 wiki 中对此进行了描述。 。
Note: I cannot change MyModule and B class since its coming from another dependency.
那么您将需要一个新模块。
class A {
@Inject
public static B b;
static void a(){b.b();}
}
class B {
@Inject public PrintStream out;
void b() { out.println("Value: b"); }
}
class MyModule extends AbstractModule {
public void configure() {
bind(B.class);
bind(PrintStream.class).toInstance(System.out);
}
}
class AModule extends AbstractModule {
public void configure() {
requestStaticInjection(A.class);
}
}
@Test
public void test() {
Guice.createInjector(new AModule(), new MyModule()); // Can be in any order
A.a();
assertThat(A.b, is(not(nullValue())));
}
关于java - 如何使用guice注入(inject)将Class注入(inject)到具有静态方法的类中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33698211/