微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使Guice喷射器单例保持一致

如何解决使Guice喷射器单例保持一致

| 我想知道通常如何使用喷油器。我了解它主要在启动时使用,但是您如何在运行时使用它来创建某个实现的对象? 例如,我有一个用户界面,其中包含用户A,用户B和用户C的实现。我在运行时使用Guice的想法是将其包装在Singleton类中,这样我就可以检索它,而不是每次要创建User对象的实例时都创建一个新的注射器。
//Create in singleton wrapper class
Injector injector = Guice.createInjector(new SecurityModule());

//Retrieve and use at run-time (Manager is the singleton wrapper class)
Injector injector = Manager.getInstance().getInjector();
User user = injector.getInstance(User.class);
这是通常的做法吗?基本上,我想确保集中所有配置,以减少错误(例如,使用错误的模块)。它也更易于管理,因此,如果我决定使用其他配置模块,则可以在一个类中进行更改,而不是在使用它的每个java类中进行更改。 谢谢, 插口     

解决方法

除极少数特殊情况外,您无需在应用程序中直接使用ѭ1,即使如此,您也绝对不应将其设置为静态Singleton。如果您希望能够使用Guice在应用程序中的某个位置检索
User
的新实例,则只需注入
Provider<User>
并在需要时对其调用
get()
。     ,我会写:
public class Manager {
    private static Manager instance;
    // getInstance singleton method left out for brevity
    private Injector injector;
    private Manager() {
        injector = Guice.createInjector(...);
    }
    public <T> T get(Class<? extends T> cls) {
        return injector.getInstance(cls);
    }
}
所以你可以做
Manager.getInstance().get(User.class)
,并且不必使用Guice的Injector,从而使您可以更改Dependency Injection框架,而无需更改应用程序代码。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。