我正在努力实现 DI,特别是使用 guice 的构造函数注入。我很难理解如何将泛型类的类型注入构造函数。
我的班级如下:
public class Foo<T> {
private Class<T> clazz;
Foo(Class<T> clazz) {
this.clazz = clazz;
}
}
我可以使用 guice 在运行时将类的类型注入到构造函数中吗?简单地说,我可以使用 guice 注入 Foo 构造函数吗?
我正在努力实现 DI,特别是使用 guice 的构造函数注入。我很难理解如何将泛型类的类型注入构造函数。
我的班级如下:
public class Foo<T> {
private Class<T> clazz;
Foo(Class<T> clazz) {
this.clazz = clazz;
}
}
我可以使用 guice 在运行时将类的类型注入到构造函数中吗?简单地说,我可以使用 guice 注入 Foo 构造函数吗?
是的,您可以使用 Guice 的内置 s 注入来做到这一点TypeLiteral
。
public class Main {
public static void main(String[] args) {
Injector injector = Guice.createInjector();
Test<Integer> testInt = injector.getInstance(Key.get(new TypeLiteral<Test<Integer>>() {}));
testInt.action();
Test<String> testString = injector.getInstance(Key.get(new TypeLiteral<Test<String>>() {}));
testString.action();
}
public static class Test<T> {
private final Class<? super T> clazz;
@Inject
public Test(TypeLiteral<T> literal) {
this.clazz = literal.getRawType();
}
public void action() {
System.out.println(clazz);
}
}
}
不过,我不太确定为什么会getRawType()
返回Class<? super T>
,而不是Class<T>
。
利用
bind(new TypeLiteral<Class<SomeClass>>() {}).toInstance(SomeClass.class);
配置 Guice 注入SomeCLass.class
到构造函数中
Foo<SomeClass>