在我在Google上发布的所有Android项目中,我总是使用依赖注入Roboguice。最近,我看到了Roboguice3.0的好处,然后我决定研究Android上的其他库,用于依赖注入,而不是只使用Roboguice。我是如何找到短剑的,发现了一个吸引人的概念,懒散注入,我还读了匕首对盖斯的文章。
发布于 2014-11-19 20:59:43
Lazy只是一个延迟解析绑定的盒子。它与Provider非常相似,但有一个重要的区别:它将缓存来自第一个调用的值,并在随后的调用中返回它。
对于单个对象的绑定,从使用者的角度看没有行为差异。Lazy<Foo>和Provider<Foo>都会懒洋洋地查找绑定并每次返回相同的实例。
唯一的行为改变是当您有一个非单例绑定时。
您可以使用Guice实现Lazy,如下所示:
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);
}https://stackoverflow.com/questions/27025450
复制相似问题