Java 如何使用Guice创建隐式泛型绑定?
这是我的问题,我有一个Java 如何使用Guice创建隐式泛型绑定?,java,generics,binding,guice,implicit,Java,Generics,Binding,Guice,Implicit,这是我的问题,我有一个客户端接口,它有一个Prop getProp(Class)方法。PropKey可以用PropKey.of(Class)构造 我将Client的一个实例注入到一个模块中,像这样bind(Client.class).to(ClientImpl.class).in(Scopes.SINGLETON)我希望能够像这样注入Prop: public class MyService implements Service { @Inject Client client; @
客户端
接口,它有一个Prop getProp(Class)
方法。PropKey
可以用PropKey.of(Class)
构造
我将Client
的一个实例注入到一个模块中,像这样bind(Client.class).to(ClientImpl.class).in(Scopes.SINGLETON)代码>我希望能够像这样注入Prop
:
public class MyService implements Service {
@Inject Client client;
@Inject Prop<User> user;
}
公共类MyService实现服务{
@注入客户端;
@注入道具用户;
}
我如何告诉Guice注入Prop
将导致client.getProp(User.class)
。我主要是通过SPI搜索如何实现这一点,但没有找到任何获得未知绑定的方法。我还回顾了Jukito,这是一个使用SPI的高质量项目。没有办法让Guice为所有类型的T
绑定Prop
,除非Prop
本身是一个可注射混凝土类。在这种情况下,它将“起作用”
但是如果类型集T
很小,则可以像下面这样显式绑定到提供程序:
class PropProvider<T> implements Provider<Prop<T>> {
private final Class<T> type;
@Inject Client client;
PropProvider(Class<T> type) {
this.type = type;
}
@Override
public void get() {
return client.getProp(type);
}
}
class MyModule extends AbstractModule {
@override
protected void configure() {
bind(new TypeLiteral<Prop<User>>() { })
.toProvider(new PropProvider(User.class));
// More similar statments...
}
}
类PropProvider实现提供程序{
私有最终类类型;
@注入客户端;
PropProvider(类类型){
this.type=type;
}
@凌驾
公开作废获取(){
返回client.getProp(类型);
}
}
类MyModule扩展了AbstractModule{
@凌驾
受保护的void configure(){
绑定(新的TypeLiteral(){})
.toProvider(新的PropProvider(User.class));
//更相似的状态。。。
}
}
或者,你可以用它来写一些东西,比如
class MyService implements Service {
@Inject Client client;
@InjectProp Prop<User> user;
}
类MyService实现服务{
@注入客户端;
@用户;
}
但您需要使用自定义注释。谢谢您的回答!实际上我已经在做了。我希望有一种方法可以使用单个@Inject
注释。