gpt4 book ai didi

java - 如何使用guice注入(inject)将Class注入(inject)到具有静态方法的类中?

转载 作者:太空宇宙 更新时间:2023-11-04 13:14:09 24 4
gpt4 key购买 nike

我是 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
}
}

最佳答案

使用requestStaticInjectionwiki 中对此进行了描述。 。

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/

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