在java main中注入提供程序
我有一个自定义提供程序,使用Guice和以下一些伪代码:在java main中注入提供程序,java,guice,Java,Guice,我有一个自定义提供程序,使用Guice和以下一些伪代码: public class MyProvider implements Provider<String> { public String get() { System.out.println("Called MyProvider.get()"); return "abcd"; } } public class MyModule extends AbstractModule {
public class MyProvider implements Provider<String> {
public String get() {
System.out.println("Called MyProvider.get()");
return "abcd";
}
}
public class MyModule extends AbstractModule {
protected void configure() {
bind(String.class).toProvider(MyProvider.class);
}
}
public class MyManager {
private MyProvider<String> myProvider;
@Inject
public MyManager(Provider<String> myProvider) { this.myProvider = myProvider; }
}
从JavaDoc获取:
返回用于获取给定类型实例的提供程序
听起来您需要传递返回的提供程序将提供的对象的类。由于您需要返回字符串的提供程序,因此我认为您需要传递String.class
试试这个:
public static void main(String[] args) {
Injector injector = Guice.createInjector(new MyModule());
MyManager mgr = new MyManager(injector.getProvider(String.class));
}
我不确定这是否是“首选方式”,但这似乎有效:
Injector injector = Guice.createInjector(new MyModule());
MyManager mgr = injector.getInstance(MyManager.class);
我不喜欢这个解决方案,因为现在您正在使用“new”创建MyManager的实例,尽管它被配置为使用依赖项注入。混合使用“新”和注入是许多难以调试错误的根源。当涉及到guice时:当您使用“new”时,您将无法再受益于任何aop特性(注入器等)。
Injector injector = Guice.createInjector(new MyModule());
MyManager mgr = injector.getInstance(MyManager.class);