Guice 注入泛型类型
我正在尝试用 Guice 注入泛型类型。我有存储库<T >它位于Cursor类中。
public class Cursor<T> {
@Inject
protected Repository<T> repository;
因此,当我创建Cursor< User >时,我还希望 Guice 将我的存储库注入存储库<用户>。有没有办法做到这一点?
我正在尝试用 Guice 注入泛型类型。我有存储库<T >它位于Cursor类中。
public class Cursor<T> {
@Inject
protected Repository<T> repository;
因此,当我创建Cursor< User >时,我还希望 Guice 将我的存储库注入存储库<用户>。有没有办法做到这一点?
你必须使用TypeLiteral
:
import com.google.inject.AbstractModule;
import com.google.inject.TypeLiteral;
public class MyModule extends AbstractModule {
@Override
protected void configure() {
bind(new TypeLiteral<Repository<User>>() {}).to(UserRepository.class);
}
}
要获取 的实例,需要:Cursor<T>
Injector
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.TypeLiteral;
public class Main {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new MyModule());
Cursor<User> instance =
injector.getInstance(Key.get(new TypeLiteral<Cursor<User>>() {}));
System.err.println(instance.repository);
}
}
有关更多详细信息,请参阅常见问题解答。