请用合适的例子解释Supplier(in Guava)接口的使用。
The Supplier
接口只是一个返回值的无参数函数的抽象...它是一个获取对象的某个或多个实例的方法。因为它很通用,所以可以用来做很多事情。贾里德解释了如何Multimaps
工厂将其用作创建新实例的工厂Collection
某种类型的值。
鉴于界面的简单性,它还允许对对象进行一些非常强大的装饰Supplier
的行为,将其包装在另一个中Supplier
这会以某种方式改变它的行为。记忆就是其中一个例子。我用过Suppliers.memoizeWithExpiration
我自己的方法是一种简单的方法,这样在给定的时间段内,某些数据最多只能从服务器读取一次。
我还建议您看一下 Guice 以及如何Provider
里面用到了接口。Provider
完全等于Supplier
这是 Guice 工作方式的核心。
-
Provider
允许用户定义创建给定类的新对象的自定义方式。用户可以写一个get()
方法可以执行创建新对象所需的任何代码,因此它们不限于让 Guice 单独使用构造函数来创建对象。在这里,他们使用它来定义自定义factory对于对象的新实例。
- Guice 允许注入
Provider
任何依赖性。这可能每次都会返回一个新实例get()
被调用,或者它可能总是返回单个实例或两者之间的任何内容,具体取决于绑定的方式Provider
代表有范围。这也允许依赖项的“延迟实例化”......Provider
给出一个类 a创建对象的方法无需提前实际创建对象。不需要创建对象的实例,直到以下情况:get()
叫做。
- 如上所述,
Provider
它们构成了 Guice 范围界定的基础。如果你看一下Scope http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/Scope.html接口,你会注意到它的单一方法Provider<T> scope(Key<T> key, Provider<T> unscoped)
定义为Provider
s。该方法需要创建对象的新实例的东西 (the Provider<T> unscoped
)并返回一个Provider<T>
基于应用范围定义的任何策略,可能返回对象的某些缓存实例,而不是创建一个新实例。默认NO_SCOPE
范围只是沿着unscoped
提供者,意味着每次都会创建一个新实例。这SINGLETON
范围缓存第一次调用的结果unscoped.get()
然后返回该单个实例,确保依赖于单例范围对象的所有内容都获得对该单个对象的引用。请注意,Provider
由返回SINGLETON
范围的scope
方法确实本质上是同一件事 as the Supplier
由返回Suppliers.memoize
(虽然有点复杂)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)