如何解决使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 举报,一经查实,本站将立刻删除。