繁体   English   中英

Guice 动态绑定,获取实例

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM