首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Roboguice惰性注射

Roboguice惰性注射
EN

Stack Overflow用户
提问于 2014-11-19 19:36:07
回答 1查看 421关注 0票数 2

在我在Google上发布的所有Android项目中,我总是使用依赖注入Roboguice。最近,我看到了Roboguice3.0的好处,然后我决定研究Android上的其他库,用于依赖注入,而不是只使用Roboguice。我是如何找到短剑的,发现了一个吸引人的概念,懒散注入,我还读了匕首对盖斯的文章。

  • 机器人是这个功能还是类似的东西?
  • 如果没有,那么限制是因为Roboguice使用反射,而Dagger是通过预先生成代码来工作的?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-19 20:59:43

Lazy只是一个延迟解析绑定的盒子。它与Provider非常相似,但有一个重要的区别:它将缓存来自第一个调用的值,并在随后的调用中返回它。

对于单个对象的绑定,从使用者的角度看没有行为差异。Lazy<Foo>Provider<Foo>都会懒洋洋地查找绑定并每次返回相同的实例。

唯一的行为改变是当您有一个非单例绑定时。

您可以使用Guice实现Lazy,如下所示:

代码语言:javascript
复制
public interface Lazy<T> { T get() }

public final class LazyProvider<T> implements Lazy<T> {
  private static final Object EMPTY = new Object();

  private final Provider<T> provider;
  private volatile Object value = EMPTY;

  public LazyProvider(Provider<T> provider) {
    this.provider = provider;
  }

  @Override public T get() {
    Object value = this.value;
    if (value == EMPTY) {
      synchronized (this) {
        value = this.value;
        if (value == EMPTY) {
          value = this.value = provider.get();
        }
      }
    }
    return (T) value;
  }
}

// In your module:

@Provides Lazy<Foo> provideLazyFoo(Provider<Foo> foo) {
  return new LazyProvider<Foo>(foo);
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27025450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档