是否应使用 @Singleton 对具有昂贵成员实例的 Guice 提供程序进行注释?
是否应该用 ?我的理由是:如果 Provider 向其他 Singleton 类提供了一个对象,并且该对象本身的创建成本相对较高,那么使用 Singleton Provider 在其标记的构造函数中构造昂贵的对象,将其存储为成员,然后只在 getter 中返回已保存的全局变量,难道没有意义吗?像这样:@Singleton
@Inject
@Singleton
public class MyProvider extends Provider<ExpensiveObject> {
private ExpensiveObject obj;
@Inject
public MyProvider() {
/* Create the expensive object here, set it to this.obj */
}
@Override
public ExpensiveObject get() {
return obj;
}
}
更新
让我在这里再澄清一下。这不是关于我是否应该使用 或 。这与所创建对象的“缓存”有更多关系。@Singleton
.in(Singleton.class)
假设对象创建需要多个 RPC 才能完成,例如反序列化 JSON 或发出 HTTP 请求。这可能需要相当长的时间。如果我打算多次使用此提供程序注入到类中,那么只创建一次这样的对象难道没有意义吗?
另请注意,我必须能够使用提供程序,因为我需要能够注入提供程序。