[英]Guice Dynamic Binding, get Instance
我是 Java 中依赖注入和 Guice 的新手。 我在动态注入合适的对象时遇到问题。
例如:
public class Main {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new MyModule());
StudentStore studentStore = injector.getInstance(StudentStore.class);
RegisterService registerService = injector.getInstance(RegisterService.class);
registerService.register("First User");
registerService.register("Second User");
//Now I would like to use OfflineRegisterService.class - is it good idea to do it here?
registerService = injector.getInstance(OfflineRegisterService.class);
registerService.register("Third User");
registerService.register("Fourth User");
System.out.println(studentStore.size());
}
}
它有效,但这是最好的主意吗?
public class MyModule extends AbstractModule {
@Override
protected void configure() {
bind(StudentStore.class).to(MemoryStudentStore.class);
bind(RegisterService.class).to(OnlineRegisterService.class);
}
}
至于Guice,您的解决方案很好。 为了代码可读性,我将为离线变量创建一个新的局部变量。 所以你总是知道你在使用哪一个:
public class Main {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new MyModule());
final StudentStore studentStore = injector.getInstance(StudentStore.class); // final prevents reassignment
// do some stuff
//Now I would like to use OfflineRegisterService.class - is it good idea to do it here?
final offlineRegisterService = injector.getInstance(OfflineRegisterService.class); // final too
offlineRegisterService.register("Third User");
offlineRegisterService.register("Fourth User");
System.out.println(studentStore.size());
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.